android 소프트웨어 자동 업데이트 실현 절차
안 드 로 이 드 애플 리 케 이 션 을 실현 하려 면 APK 소프트웨어 를 다운로드 하 는 방법 을 자동 으로 업데이트 합 니 다.저 는 다음 과 같은 몇 가지 방법 을 취 했 습 니 다.
1.메 인 인터페이스 에 들 어 갈 때마다 서버 의 데 이 터 를 가 져 와 최신 버 전인 지,예,조작 이 없 는 지 확인 하고 다음 절 차 를 진행한다.
2.소프트웨어 업데이트 여부 대화 상자 팝 업,다운 로드 를 클릭
3.다운 로드 된 진행 바 를 팝 업 하 는 대화 상자,다운 로드 를 시작 합 니 다.언제든지 버튼 을 누 르 고 다운 로드 를 중단 할 수 있 습 니 다.
4.다운로드 완료 후 시스템 설치 소프트웨어 서비스,설치 소프트웨어 호출
효과 그림:
실현 과정:
UpdateManager 를 새로 만 드 는 방법 입 니 다.구체 적 인 내용 은 자세 한 설명 이 있 습 니 다.
package lgx.acc.updatedemo;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
public class UpdateManager {
// Context
private Context mContext;
// , false
private boolean isNew = false;
private boolean intercept = false;
//
private String apkUrl = "http://shouji.360tpcdn.com/360sj/tpi/20130201/"
+ "com.flikie.wallpapers.gallery_4.apk";
// APK
private static final String savePath = "/sdcard/updatedemo/";
private static final String saveFileName = savePath
+ "UpdateDemoRelease.apk";
//
private Thread downLoadThread;
private int progress;//
TextView text;
// UI handler msg
private ProgressBar mProgress;
private static final int DOWN_UPDATE = 1;
private static final int DOWN_OVER = 2;
public UpdateManager(Context context) {
mContext = context;
}
/**
*
*/
public void checkUpdateInfo() {
// isNew ,
if (isNew) {
return;
} else {
showUpdateDialog();
}
}
/**
* ,
*/
private void showUpdateDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle(" ");
builder.setMessage(" , !");
builder.setPositiveButton(" ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showDownloadDialog();
}
});
builder.setNegativeButton(" ",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}
/**
*
*/
private void showDownloadDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle(" ");
LayoutInflater inflater = LayoutInflater.from(mContext);
View v = inflater.inflate(R.layout.progress, null);
mProgress = (ProgressBar) v.findViewById(R.id.progress);
builder.setView(v);
builder.setNegativeButton(" ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
intercept = true;
}
});
builder.show();
downloadApk();
}
/**
* APK
*/
private void downloadApk() {
downLoadThread = new Thread(mdownApkRunnable);
downLoadThread.start();
}
private Runnable mdownApkRunnable = new Runnable() {
@Override
public void run() {
URL url;
try {
url = new URL(apkUrl);
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.connect();
int length = conn.getContentLength();
InputStream ins = conn.getInputStream();
File file = new File(savePath);
if (!file.exists()) {
file.mkdir();
}
File apkFile = new File(saveFileName);
FileOutputStream fos = new FileOutputStream(apkFile);
int count = 0;
byte[] buf = new byte[1024];
while (!intercept) {
int numread = ins.read(buf);
count += numread;
progress = (int) (((float) count / length) * 100);
//
mHandler.sendEmptyMessage(DOWN_UPDATE);
if (numread <= 0) {
//
mHandler.sendEmptyMessage(DOWN_OVER);
break;
}
fos.write(buf, 0, numread);
}
fos.close();
ins.close();
} catch (Exception e) {
e.printStackTrace();
}
}
};
/**
* APK
*/
private void installAPK() {
File apkFile = new File(saveFileName);
if (!apkFile.exists()) {
return;
}
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file://" + apkFile.toString()),
"application/vnd.android.package-archive");
mContext.startActivity(intent);
};
private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case DOWN_UPDATE:
mProgress.setProgress(progress);
break;
case DOWN_OVER:
installAPK();
break;
default:
break;
}
}
};
}
progressbar.xml 의 구체 적 인 코드 도 있 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ProgressBar
android:id="@+id/progress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
이후 MainActivity 의 onCreate 방법 에서 코드 를 호출 하면 됩 니 다.
UpdateManager manager=new UpdateManager(MainActivity.this);
manager.checkUpdateInfo();
manifest 에 권한 을 넣 는 것 을 기억 하 세 요.
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
마지막 효과 가 나 왔 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.