源码链接:

DownLoadManager下载demo,适配7.0,8.0

我们知道 从7.0以后。Android对隐私的保护力度也越来越大。从Android6.0引入的动态权限控制(Runtime Permissions)到Android7.0的“私有文件夹被限制訪问”,“StrictMode API 政策”。这就要求我们需要我们在安装应用的时候做一些适配.

7.0之前:

Intent intent = new Intent(Intent.ACTION_VIEW);
// 由于没有在Activity环境下启动Activity,设置下面的标签
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(downloadedUri, "application/vnd.android.package-archive");
context.startActivity(intent);

7.0之后:我们需要用到FileProvider.

Intent intent = new Intent(Intent.ACTION_VIEW);
File file = (new File(apkPath));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri apkUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
context.startActivity(intent);

但是今天在使用的时候下载成功以后。跳到安装界面的时候。报错:解析安装包失败.进到下载目录看了下。apk确实完整下载下来了。那为什么会安装不上呢。

原因:

   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);}//这两句话的顺序整反了。我写的是:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);}                   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

我先调用的是addFlags再调用的setFlags。我们点进去就可以看到

public @NonNull Intent setFlags(@Flags int flags) {mFlags = flags;return this;}public @NonNull Intent addFlags(@Flags int flags) {mFlags |= flags;return this;
}

setFlags是直接赋值的。而addFlags是|= 也就是+=;我先add再set就会把前面Intent.FLAG_GRANT_READ_URI_PERMISSION)覆盖掉。导致解析安装包失败。

解决办法:都用addFlags().就没有顺序之分。要是一个setFlags().一个addFlags()。那。addFlags要放set后面。

7.0以上系统安装apk失败的原因总结:

A:看下apk是否完整的下载下来。(找到你的下载路径下。点击看看能不能安装。如果可以。就说明下载成功了。)

B:看下是不是用的FileProvider。FileProvider使用是否正确。把路径都打印下来看看。

C:看下是不是和我犯一样的错误。setFlags和addFlags顺序。

D:如果是8.0以上的系统。那别忘了还有个未知来源的权限需要申请下:

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

E:还有有的可能用的系统自带的DownloadManager进行下载。这个时候也要注意:

Android 7.0 或更高版本开发的应用在尝试访问DownloadManager.COLUMN_LOCAL_FILENAME时会触发java.lang.SecurityException.取而代之的是:DownloadManager.COLUMN_LOCAL_URI。

F:最后还是解析失败,就再看看自己该给的权限是否都申请了。例如:存储权限。

具体实现请看上面的例子.

每日语录:

你现在的努力,辛苦,压力,承受的一切,都是为了攒够能力和本钱,去做自己更喜欢的事,去为自己争取选择的权利。 ​​​​加油!!!

单曲循环《你知道我在等你吗》 一首很好听的老歌。。。

Android 7.0及其以上系统安装安装包时候提示:解析安装包失败相关推荐

  1. 解决APK下载到Cache目录安装提示“解析安装包失败”的问题

    下载的APK在使用下面代码安装的时候提示解析安装包失败,APK本身没有问题,使用手机助手或者adb install 都可以正常安装. /**      * 安装应用程序      */     pub ...

  2. Android 7.0中的多窗口-分屏-实现解析

    禁用APK分屏-AndroidManifest.xml添加属性:android:resizeableActivity="false" Android 7.0中的多窗口实现解析 标签 ...

  3. 安防专家如何解析安防人脸识别应用

    针对2017年315晚会上曝光的人脸识别技术存在的漏洞,笔者认为央视更多的是为了提醒人们要重视日常生活中的信息安全保护.当然也指出了目前人脸识别技术依然存在诸多需要完善的地方,其商业化应用的道路依然漫 ...

  4. 小米5怎样升级android,小米5开发版怎么升级Android 7.0?小米5开发版升级Android 7.0教程...

    Android 7.0系统已经陆续推送,今天小米5手机的Android 7.0终于公测了,虽然只限于开发版,但是小伙伴们总算有盼头了!小米5开发版怎么升级Android 7.0?下面小编为大家带来小米 ...

  5. android 7.0 按钮崩溃,Android 7.0调用相机崩溃详解及解决办法

    Android 7.0调用相机崩溃解决办法 错误提示: android.os.FileUriExposedException: file:///storage/emulated/0/DCIM/IMG_ ...

  6. 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fuchaosz/article/details/52473660 1 前言 经过一周的奋战,终于从谷 ...

  7. android9.0官方壁纸,安卓福利:全新Android 9.0原生壁纸 每一张都是谷歌的精挑细选!...

    原标题:安卓福利:全新Android 9.0原生壁纸 每一张都是谷歌的精挑细选! 至今,安卓碎片化的程度依然没有得到缓解,Android 8.0发布已经一年多,但却仅仅只有2%左右的用户成功尝到了奥利 ...

  8. [Android编译(二)] 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机

    1 前言 经过一周的奋战,终于从谷歌官网上下载最新的Android 6.0.1_r62源码,编译成功,并成功的刷入nexus6p,接着root完毕,现写下这篇博客记录一下实践过程. 2 简介 自己下载 ...

  9. android最新相机打不开,Android 7.0调用相机崩溃详解及解决办法

    Android 7.0调用相机崩溃解决办法 错误提示: android.os.FileUriExposedException: file:///storage/emulated/0/DCIM/IMG_ ...

最新文章

  1. Python 中异常嵌套
  2. PyTorch 实现经典模型4:GoogLeNet
  3. jvm性能调优 - 20G1垃圾回收器应该如何设置参数
  4. a股历史30年的大盘价_[最新]回顾A股历史上的大井喷行情
  5. python异常处理的作用_python之路——异常处理
  6. 《大型门户网站是这样炼成的!(Struts 2+Spring 2+Hibernate 3) 》
  7. Shell入门教程:算术运算
  8. 我的联想笔记本电脑为啥字母键变成数字键怎么切换过来
  9. sql net message from client
  10. 解决AndroidStudio引入Jar出现Unable to resolve dependency for ':app@debug/compileClasspath
  11. Hadoop集群部署模型纵览3
  12. Android拦截浏览器广告,浏览器拦截广告的几种方法
  13. 【解决】简单有效的使用lodop打印小票功能
  14. SSH登录, SCP传文件
  15. 数据结构学习(冒泡、选择、插入、快速排序)
  16. 三星G9006W 6.0 root
  17. python自动化 2 对象定位(1)
  18. 对汇编中无条件转移指令的认识
  19. 用Opencv生成一些五颜六色的图片
  20. 2022年深圳市专精特新中小企业认定标准、材料清单

热门文章

  1. 【NLP】干货!Python NLTK结合stanford NLP工具包进行文本处理
  2. 树莓派开发之超声波模块
  3. 总结IT售前多年工作经验,给各位面试售前岗位同仁一些建议。
  4. 求一元二次方程ax2+bx+c=0的根
  5. 崔磊的华为鸿蒙,王健林1.2亿收藏崔磊作品,崔磊天价玉雕成交不止一件
  6. django分页实现
  7. 自考计算机原理知识点,(完整版)18版自考04741《计算机网络原理》知识点——第一章...
  8. c语言习题---(循环语句)
  9. [自动驾驶-车辆轨迹预测] 资料准备及学习视频
  10. 吃鸡用什么蓝牙耳机?高性价比的游戏蓝牙耳机推荐