在安卓中apk的安裝是調用第三方的一個類。利用意圖(Intent)來調用第三方的類:
例:在這裡是通過一個提醒框當點選“立即更新”時,進行下載下傳 在下載下傳中實作三個方法(下載下傳失敗、下載下傳中、下載下傳成功)在下載下傳成功的方法中調用一個安裝的方法 在安裝的方法中我們利用intent來實作安裝。
private void showUpdateDialog() {
// TODO Auto-generated method stub
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("更新提醒");
builder.setMessage(description);
builder.setPositiveButton("立刻更新", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int arg1) {
// 進行更新操作
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
FinalHttp finalHttp = new FinalHttp();
finalHttp.download(apkurl,
Environment.getExternalStorageDirectory().getAbsolutePath() + "/mobilesafe2.0.apk",
new AjaxCallBack<File>() {
@Override
public void onFailure(Throwable t, int errorNo,
String strMsg) {
// 下載下傳失敗
super.onFailure(t, errorNo, strMsg);
Toast.makeText(getApplicationContext(), "下載下傳失敗", 1).show();
}
@Override
public void onLoading(long count, long current) {
// 正在下載下傳
super.onLoading(count, current);
//進度的百分比
long progress = current * 100 / count;
tv_showupdate_progress.setText("下載下傳進度:" + progress+ "%");
}
@Override
public void onSuccess(File t) {
// 下載下傳成功
super.onSuccess(t);
installApk(t);
}
private void installApk(File t) {
// 安裝apk
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
//添加類型
intent.addCategory("android.intent.category.DEFAULT");
intent.setDataAndType(Uri.fromFile(t), "application/vnd.android.package-archive");
startActivity(intent);
}
});
} else {
Toast.makeText(getApplicationContext(), "請檢查外部儲存設備是否安裝", 1).show();
}
}
});
builder.setNegativeButton("下次再說", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int arg1) {
// 關閉對話框,進入主界面
dialog.dismiss();
enterHome();
}
});
builder.show();
}