关于Android7.0 ,8.0应用内安装APK的问题

关于7.0

     Android在7.0之后对文件访问权限做了变更,为了提高私有目录的安全性,防止应用信息的泄漏,从 Android 7.0 开始,应用私有目录的访问权限被做限制。具体表现为,开发人员不能够再简单地通过 file:// URI 访问其他应用的私有目录文件或者让其他应用访问自己的私有目录文件。当我们在应用中使用包含 file:// URI 的 Intent 离开自己的应用时,程序会发生故障。,出现 FileUriExposedException 异常,导致应用出现崩溃闪退问题。解决方案是使用FileProvider,,就是 ContentProvider 的一个特殊子类,帮助我们将访问受限的 file:// URI 转化为可以授权共享的 content:// URI

  首先 在Manifest 文件中注册一个Provider


 其中,android:authorities 属性值是一个由 build.gradle 文件中的 applicationId 值和自定义的名称组成的 Uri 字符串(这样写是约定俗成的)。"${applicationId}" 是应用的id 即包名,".fileProvider" 是自己定义的名字,当然也可以不写。android:authorities = "${applicationId}",那么后面调用这个provider的时候就不用加上后面的名字        

安装应用时判断是否7.0以上的系统

authorities 即是我们在Manifest中申请的provider中的那个属性,这里传入 getPackageName()+".fileProvider" 。后面的自定义名称和provider中写的一样

关于8.0

    Android在8.0之后   未知来源的应用是不可以通过代码来执行安装的。未知权限开关也被移除,取而代之的是未知来源应用的管理列表。需要在代码中申请打开应用安装未知来源的权限。

首先在Manifest 需要的开启权限


调用安装前判断是否为8.0以上系统
申打开未知来源应用的权限

注意!!!在6.0之后是需要申请动态权限的,这里我们需要的是读写权限。

Manifest.permission.WRITE_EXTERNAL_STORAGE,

Manifest.permission.READ_EXTERNAL_STORAGE

如果没有动态申请读写内存的权限,那么最后调起安装时候会报“解析软件包时出现问题”。关于动态权限的申请请查看其他资料。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • [{"reportDate": "2018-01-23 23:28:49","fluctuateCause": n...
    加勒比海带_4bbc阅读 880评论 1 2
  • 今天 老张说: 买手机就买苹果,比安卓强太多了 工作管理: 时间驱动——面向过程——内容复杂 项目驱动——面向对象...
    B9班的真高兴阅读 245评论 0 0
  • 解读孩子的空间敏感期空间 敏感期是所有敏感期中最有趣的一个敏感期,因为透过时间和空间,我们一下被界定在一个位置,这...
    简白格阅读 284评论 0 0
  • 对任何事都不要报太高的期望,当你想象一件还未到来的美好事物时,等这件事真正来临的时候,你会发现它并没有那么美好,甚...
    高处看世界阅读 192评论 0 0
  • 咏折耳根 温志龄 入药味带腥,健体最关情。 消炎抗毒速,除热利尿灵。 天然无副效,常食有益增。 凉办...
    碧野牧歌阅读 613评论 0 1

友情链接更多精彩内容