项目开发使用模板:Android代码实现APK下载安装(代码依赖包afinal_0.5_bin.jar,可资源下载)
afinal 支持断点续传
简介afinal是一个开源的android的orm和ioc应用开发框架,其特点是小巧灵活,代码入侵量少。在android应用开发中,通过afinal的ioc框架,诸如ui绑定,事件绑定,通过注解可以自动绑定。通过afinal的orm框架,无需任何配置信息,一行代码就可以对android的sqlite数据库进行增删改查操作。同时,afinal内嵌了finalHttp等简单易用的工具,可以轻松的对http请求进行操作。
protected void showUpdateDialog() {
// TODO Auto-generated method stub
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("提示升级");
// builder.setCancelable(false);//强制选择
builder.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface arg0) {
//代替用户选择,不操作即进入主页面
enterHome();
arg0.dismiss();
}
});
builder.setMessage(description);
builder.setPositiveButton("立即升级",new OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
//下载apk,并且替换安装
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//SDcard存在
//四大主键,使用插件afinal
FinalHttp fh = new FinalHttp();
fh.download(apkurl, Environment.getExternalStorageDirectory().getAbsolutePath()+"/mobilesafe2.0.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);
}
@Override
public void onLoading(long count, long current) {
//count总大小,current是当前大小
super.onLoading(count, current);
int progress = (int)(current * 100 / count);
tv_update_info.setText("下载进度:"+progress+"%");
}
@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();
}
}
});
builder.setNegativeButton("下次再说", new OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
arg0.dismiss();
enterHome();
}
});
builder.show();
}