最近做项目发现Android 8.0+ 更新安装apk时 出现安装失败的情况 总结原因是 缺少安装的权限
Android 8.0 (Android O)为了针对一些流氓软件引导用户安装其他无关应用。在应用权限设置的“特殊访问权限”中,加入了“安装其他应用”的设置。
简单的方法 可以直接在Manifest.xml中加入下面的权限:(亲测可用)
<uses-permissionandroid:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
另外当我们执行安装的代码后 都会加入杀死进程的代码 如下:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { uri = FileProvider.getUriForFile(this, "com.example.fileprovider",tempFile); //此处为Uri临时授权 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); } else { uri = Uri.fromFile(tempFile); }
private void install(String apkPath) { Intent intent = new Intent(Intent.ACTION_VIEW); //Android 7.0+ 需要用FileProvider的方式访问隐私目录(比如相册) if (Environment.SYSTEM_VERSION_CODE >= Build.VERSION_CODES.N) { uri = FileProvider.getUriForFile(this, "com.example.fileprovider",tempFile); //此处为Uri临时授权 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); uri = Uri.fromFile(tempFile); }else{ uri = Uri.fromFile(tempFile); } intent.setDataAndType(uri, "application/vnd.android.package-archive"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); //最后杀死进程 Handler mHandler=new Handler(context); mHandler.postDealy(new Runnable(){ public void run(){ //或者是 System.exit(0); android.Process.KillProcess((android.os.Process.myPid()); } },500);//在这里延迟 500ms 是为了防止app使用FileProvider获取隐私文件时被杀死 导致安装失败 }
原文地址:https://www.cnblogs.com/bimingcong/p/10344479.html
时间: 2024-10-28 00:41:08