Android 8.0系统比起以前的系统多了一个安装未知应用程序的权限需求
(<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />),
如果我们要在8.0的系统上安装apk,那么我们必须获得这个权限.
直接上代码:
//当前版本是否大于等于26
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
boolean hasInstallPermission = context.getPackageManager().canRequestPackageInstalls();
//是否有安装权限
if (!hasInstallPermission) {
Intent ne = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
startActivityForResult(ne, 999);
} else {
installApk(context, updateFile);//直接安装
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 999) {
String apkUrl = PreferenceUtils.getString(this, "apkUrl");
File updateFile = new File(apkUrl);
installApk(this, updateFile);
}
super.onActivityResult(requestCode, resultCode, data);
}
public static void installApk(Context context, File updateFile) {
Uri uri = Uri.fromFile(updateFile);
// 通过Intent安装APK文件
Intent i = new Intent(Intent.ACTION_VIEW);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setDataAndType(uri, "application/vnd.android.package-archive");
context.startActivity(i);
android.os.Process.killProcess(android.os.Process.myPid());
}