提示更新版本,根据用户选择,进入主界面,或者从服务器下载更新,自动安装
2、提示用户是否更新,并进入主界面 a)如果版本一致,loadHomeUi(),进入主界面,2秒钟延迟,操作 b)如果版本不一致,弹出对话框,提示用户更新showUpdateDialog() // 比对当前客户端的版本号和服务器的版本号是否一致.
if (getAppVersion().equals(updateInfo.getVersion())) {// 没有新版本
Log.i(TAG, "版本一致。直接登录");
loadHomeUi();// 加载主界面
} else {// 有新版本
Log.i(TAG, "有新版本,提示用户下载");
showUpdateDialog();// 弹出对话框,提示用户更新
}
|
加载HomeActivity-从一个Activity跳转到另外一个Activity中去 /**
* TODO SplashActivity 3、加载主界面HomeActivity
*/
private void loadHomeUi() {
Intent intent = new Intent(getApplicationContext(), HomeActivity.class);
startActivity(intent);
finish();// 销毁当前的Activity,防止加载到HomeActivity后,再按后退,SplashActivity还在界面上,用户体验差。
}
|
3、应用程序的自动升级安装 a)如果版本不一致,弹出对话框,提示用户更新showUpdateDialog() b)如果用户点击"下次再说",不做操作,直接loadHomeUi()进入主界面 c)如果用户点击"立即下载",那么使用afinal框架到服务器上去下载最新apk。使用Afinal框架下载, 权限:android.permission.WRITE_EXTERNAL_STORAGE d)下载完毕后,然后自动安装,利用系统的PackageInstaller安装,installApk() |
新版本升级提醒,从服务器下载新版本 /**
* TODO SplashActivity 4、弹出对话框,提示用户更新新版本
*/
private void showUpdateDialog() {
// AlertDialog.Builder builder = new Builder(getApplicationContext());//FIXME 2、不能用getApplicationContext()
AlertDialog.Builder builder = new Builder(this);
builder.setTitle("是否更新新版本?");// 1、提醒标题
builder.setMessage(updateInfo.getDescription());// 2、新版本的描述
builder.setPositiveButton("升级", new OnClickListener() {// 3、升级按钮
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i(TAG, "正在升级:"+updateInfo.getUrlPath());
// TODO SplashActivity 升级操作:从服务器上下载最新版本的apk
FinalHttp finalHttp = new FinalHttp();
//3-1先判断外部设备状态
String externalStorageState = Environment.getExternalStorageState();
final File file = new File(Environment.getExternalStorageDirectory(), "temp.apk");
if (Environment.MEDIA_MOUNTED.equals(externalStorageState)) {//3-2为MEDIA_MOUNTED挂载状态
finalHttp.download(updateInfo.getUrlPath(), file.getAbsolutePath(), new AjaxCallBack<File>() {
//3-2-1 下载过程中。。。
@Override
public void onLoading(long count, long current) {//count总共,current当前
Log.i(TAG, "正在下载中。。。", null);
super.onLoading(count, current);
int progress = (int) (current * 100 / count);
tv_splash_downStatus.setText("下载进度:"+progress+"%");
// super.onLoading(count, current);
}
//3-2-2 下载完毕
@Override
public void onSuccess(File t) {
Log.i(TAG, "下载完毕,开始安装。。。", null);
super.onSuccess(t);
installApk(file);//下载完毕后,自动安装apk
}
});
}else {//3-3 sdcard状态不为mounted状态
Toast.makeText(getApplicationContext(), "sdcard不可用。。。", Toast.LENGTH_SHORT).show();
loadHomeUi();//进入主界面
}
}
});
builder.setNegativeButton("下次再说", new OnClickListener() {// 4、下次再说按钮
@Override
public void onClick(DialogInterface dialog, int which) {
Log.i(TAG, "这次不升级,下次再升级");
loadHomeUi();//选择下次再说,那么加载主界面HomeActivity
}
});
// 5、create()对话框并show()出来
/*AlertDialog alertDialog = builder.create();
alertDialog.show();*/
builder.show();
}
|
安装apk-利用系统的PackageInstaller安装 /**
* TODO SplashActivity 5、从File安装指定的apk(使用系统的PackageInstaller安装)
* @param t
*/
@SuppressLint("InlinedApi")
private void installApk(File t) {
/*<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.INSTALL_PACKAGE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="file" />
<data android:mimeType="application/vnd.android.package-archive" />
</intent-filter>*/
Intent intent = new Intent();
intent.setAction(Intent.ACTION_INSTALL_PACKAGE);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setDataAndType(Uri.fromFile(t), "application/vnd.android.package-archive");
startActivity(intent);
}
|