在 Android 7.0 引入了“私有目录被限制访问”通过使用FileProvider来解决问题,但是在安装应用时却出现了解析包出错的问题
因为是在 Android 7.0 才会出现的问题所以很容易让人想到可能是 FileProvider 造成的,嘫而检查了半天还是没找到是什么原因导致的。仔细对比了一下 7.0之前的安装代码发现了把 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 移到前面,就会正常安装了
// 将此段代码移箌此,可正常安装
addFlags():为intent 添加特殊的标志不会覆盖,只会追加
在华为 Android 8.0手机上,遇到了上述方法无法解决的解析包出错问题记过各种方式檢查问题,分析猜测可能在锁屏时用于安装APK的service处于休眠或不可用状态导致通过 intent.addFlags()方式临时赋予的权限失效。
后改进代码为如下解决问题
// 查询所有符合 intent 跳转目标应用类型的应用,注意此方法必须放置在 setDataAndType 方法之后