使用第三方框架xutil:下载apk文件并安装。
进入到安装页面
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);//arg0.result返回iFile对象(下载的apk文件),
intent.setDataAndType(Uri.fromFile(arg0.result),//在6.0之后此处会报错
// 需要导入jar包:org.apache.http.legacy.jar"application/vnd.android.package-archive");
PackageInstall/AndroidMainfast.xml
<activity android:name=".PackageInstallerActivity"
android:configChanges="orientation|keyboardHidden"
android:theme="@style/Theme.Transparent">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="content" />
<data android:scheme="file" />
<data android:mimeType="application/vnd.android.package-archive" />
</intent-filter>
</activity>
实例代码:
mDownloadUrl:下载连接
target:文件下载的路径
protected void download() {
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
tvProgress.setVisibility(View.VISIBLE);// 显示进度
String target = Environment.getExternalStorageDirectory()
+ "/update.apk";
// XUtils
HttpUtils utils = new HttpUtils();
utils.download(mDownloadUrl, target, new RequestCallBack<File>() {
// 下载文件的进度, 该方法在主线程运行
@Override
public void onLoading(long total, long current,
boolean isUploading) {
super.onLoading(total, current, isUploading);
System.out.println("下载进度:" + current + "/" + total+"%");
}
// 下载成功,该方法在主线程运行
@Override
public void onSuccess(ResponseInfo<File> arg0) {
System.out.println("下载成功");
// 跳转到系统安装页面
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);//arg0.result返回iFile对象(下载的apk文件),
intent.setDataAndType(Uri.fromFile(arg0.result),//在6.0之后此处会报错
// 需要导入jar包:org.apache.http.legacy.jar"application/vnd.android.package-archive");
// startActivity(intent);
startActivityForResult(intent, 0);// 如果用户取消安装的话,
// 会返回结果,回调方法onActivityResult
}
// 下载失败,该方法在主线程运行
@Override
public void onFailure(HttpException arg0, String arg1) {
Toast.makeText(SplashActivity.this, "下载失败!",
Toast.LENGTH_SHORT).show();
}
});
} else {
Toast.makeText(SplashActivity.this, "没有找到sdcard!",
Toast.LENGTH_SHORT).show();
}
}
// 如果用户取消安装的话,回调此方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
enterHome();//进入主界面
super.onActivityResult(requestCode, resultCode, data);
}