最近做项目发现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获取隐私文件时被杀死 导致安装失败 }

最新文章

  1. 《Note --- Unreal 4 --- behavior tree》
  2. 【整理】--【字符设备】cdev_init()/cdev_alloc(),cdev_add(),cdev_del()
  3. 处理 EF 并发其实就这么简单
  4. Remote Desktop Connection from Windows 7 to Ubuntu 12.04
  5. 使用dotTrace6.0进行内存分析
  6. Class.asSubclass浅谈
  7. 04 Linux 指令语法结构与帮助命令
  8. NYOJ-21 三个水杯 AC 分类: NYOJ 2014-02-08 11:35 174人阅读 评论(0) 收藏
  9. Spring框架学习之第3节
  10. sql server 中 syscolumns 各个字段的意义
  11. Linux(CentOS)搭建SVN服务器全攻略
  12. [置顶] 白话二分匹配之最大匹配+附上hdu2063解题报告
  13. 深入理解Arrays.sort() (转)
  14. POJ 3468 A Simple Problem with Integers(树状数组区间更新) 续
  15. jacascript DOM节点——节点内容
  16. 利用 Charles Proxy 下载旧版本 iOS App
  17. iptables 分析(1)
  18. STL语法——集合:set 安迪的第一个字典(Andy&#39;s First Dictionary,UVa 10815)
  19. 去掉WinLicense文件效验的方法
  20. Java查看类的成员

热门文章

  1. mysql集群搭建--韩国庆
  2. 使用python函数持续监控电脑cpu使用率、内存、c盘使用率等
  3. vscode中使用markdown(转)
  4. IDEA 倒入maven项目下载很慢
  5. SOD框架的Model、连接数据库及增删改查
  6. Java2E中的路径问题
  7. laravel-- facade 实现CURD
  8. Asp.net core中由于页面编码导致的中文乱码
  9. Mysql时间差计算
  10. Dnsmasq 配置PXE批量安装系统