做项目的时候,公司要求自己写App在线自动检测更新,App启动是的flash界面也就是欢迎界面开始检测版本,不一样就下载;
在这里就出现一个问题,下载完了就开始安装替换,替换完了,程序没启动!但是,如果我进入其他Acitivity,然后子线程还在下载,那么下载完了还能自启动;所以就干脆在当前Activity下载,下载完了finish就可以了。如蓝色字体的代码
builder.setPositiveButton("立刻升级", new OnClickListener() {
@Overridepublic void onClick( DialogInterface dialog, int which) {
showDownloadDialog() ;
// 下载APK,并且替换安装
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
// sdcard存在
// afnal
FinalHttp finalhttp = new FinalHttp();
finalhttp.download(apkUrl, Environment.getExternalStorageDirectory().getAbsolutePath()+"/BusinessAPP_V3.apk",
new AjaxCallBack<File>(){
@Override
public void onFailure(Throwable t, int errorNo,String strMsg) {
t.printStackTrace();
Toast.makeText(getApplicationContext(), "下载失败", 1).show();
super.onFailure(t, errorNo, strMsg);
enterHome();
}
@Override
public void onLoading(long count, long current) {
// TODO Auto-generated method stub
super.onLoading(count, current);
tv_update_info.setVisibility(View.VISIBLE);
tv_update_info_text.setVisibility(View.VISIBLE);
//当前下载百分比
progress = (int) (current * 100 / count);
tv_update_info.setText(progress+"%");
System.out.println("---------------------------->progress:"+progress);
handler.sendEmptyMessage(66);
if(progress==100){
finish(); //下载完后要销毁当前Activity,否则不会自启动
mdialog.dismiss();
}
}
@Override
public void onSuccess(File t) {
// TODO Auto-generated method stub
super.onSuccess(t);
installAPK(t);
}
/**
* 安装APK
* @param t
*/
private void installAPK(File t) {
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(), "没有sdcard,请安装上在试",0).show();
return;
}
}
});