Android 兼容8.0 系统 安装apk 未知包

随着系统升级,兼容不同的系统必备

自动更新后安装

注册权限

<!-- 请求安装权限 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);
}

猜你喜欢

转载自blog.csdn.net/qq_30889373/article/details/79643319