随着系统升级,兼容不同的系统必备
自动更新后安装
注册权限
<!-- 请求安装权限 8.0 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
7.0 私有权限问题
http://blog.csdn.net/u013243573/article/details/54426063
8.0 允许安装未知应用
boolean isGranted(String permission) {
// 8.0 权限 安装apk 权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
return getActivity().getPackageManager().canRequestPackageInstalls();
}
return true;
}
//权限不存在,申请权限,并跳到当前包
if(!isGranted()){
Uri packageURI = Uri.parse("package:" + getContext().getPackageName());
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
startActivityForResult(intent, 100001);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100001) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// 同意以后 进行安装
}
}
}
/**
* 安装apk
*/
public static void installApk(Activity activity, File apkFile){
Intent intent = new Intent(Intent.ACTION_VIEW);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
} else {
// 声明需要的临时权限
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
// 第二个参数,即第一步中配置的authorities
String packageName = activity.getApplication().getPackageName();
Uri contentUri = FileProvider.getUriForFile(activity, packageName + ".fileProvider", apkFile);
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
}
activity.startActivity(intent);
}