适配Android 8.0版本更新安装与通知栏的一些坑
作者:loading 发布时间:2022-05-01 13:23:25
前言
Android 8.0系统更新之后,app的更新将不再像之前的系统版本一样能够直接下载安装包之后直接安装(以前安装未知来源应用的时候一般会弹出一个弹窗让用户去设置允许还是拒绝,并且设置为允许之后,所有的未知来源的应用都可以被安装),8.0需要用户给予允许app安装未知来源应用的权限(比如你的app 名字为A,当你需要更新时,则需要使用app的用户 授权A这个app 允许安装未知来源的权限,才能完成正常的更新操作)。
Android8.0的变化是,未知应用安装权限的开关被除掉,取而代之的是未知来源应用的管理列表,需要在里面打开每个应用的未知来源的安装权限(说实话,这个权限要找到还真的不是那么容易,我第一次就找了半天才找到。。也是尴尬)。Google这么做是为了防止一开始正经的应用后来开始通过升级来做一些不合法的事情,侵犯用户权益。当你的应用直接适配到Android8之后,内部启动应用安装是会被阻塞的,如果不处理好这个未知来源的权限,会导致应用根本无法更新,只能去应用市场重新下载。
好了,废话不多说,最近适配了8.0的检查更新的功能,包括通过uri安装和notification提示进度。网上的例子很多 但是都很坑,需要加权限
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
这个权限是不需要动态申请的。一些坑人的帖子还写的很有道理的样子,要申请 并没有什么卵用。
下边说一下具体的适配步骤及注意事项:
1、添加权限
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
2、动态申请权限在这里简单说下:
manifest里添加
在res目录下添加xml目录
3、关于URI获取的工具类(可加群195026919在群共享获取),由于排版问题 只能截图了。
4、调用方式,调用安装代码
所有的URI获取 都用下边代码
Uri uri = FileProvider7.getUriForFile(context,updateFile);
安装apk代码
调用之后会弹出下边这样的提示框,而不是一个应用加载列表手动选择点击授权。
5、通知栏notification注意事项
用下边的版本进行编译项目 之前Notification.Builder的方式能支持8.0 的手机,但是如果用26去编译在8.0上就会有问题了notification不会出现等问题,notification的在一些8.0以下的个别的手机上也会有问题,特别是小米的。一些参数得单独设置,
<uses-sdk
android:minSdkVersion=”8″
android:targetSdkVersion=”23″ />
在适配8.0手机的时候最好用
NotificationChannel来去实现通知栏,免得以后再出现兼容的问题。
来源:http://www.androidchina.net/8506.html


猜你喜欢
- 本文所要介绍的简易天气App主要用RxAndroid、MVP、Retrofit实现,首先来看看效果:主页内容:右侧栏天气列表:左侧栏城市列表
- 当屏幕转动切换的时候 Android 机制是:销毁当前屏幕的 Activity ,然后重新开启一个新的适应屏幕改变的 Activity 。那
- 如果项目中使用到了MyBatis框架,那么使用通用Mapper和PageHelper分页插件将极大的简化我们的操作。通用Mapper可以简化
- 组播的概念UDP信息传递的方式分三类,分别是单播 Unicast:客户端与服务器之间的点到点连接多播MultiCast:又称组播,是&
- /** * 朴素字符串算法通过两层循环来寻找子串, * 好像是一个包含模式的“模板”沿待查文本滑动。 * 算法的思想是:从主串S的第p
- 这篇文章主要介绍了springboot整合通用mapper过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- retrofit post请求上传表单和文件最重要的就是就是去构建RequestBody,今天为大家带来一种超级简单的上传方式Body方式:
- @ConditionalOnProperty作用及用法在spring boot中有时候需要控制配置类是否生效,可以使用@Conditiona
- 1、首先看一下下面两个sql语句的区别:<select id="selectByNameAndPassword"
- 引言在第一篇文章中我们分析了协程启动创建过程启动过程,在本文中,我们将着重剖析协程中协程调度的逻辑流程。主要是分析解答如下2个问题:涉及到协
- 废话不多说,直接上代码package com.ietree.basicskill.socket.basic.nio;import java.
- 下面的题目都是楼主在android交流群大家面试时遇到的,如果大家有好的题目或者好的见解欢迎分享,楼主将长期维护此帖。某公司高级面试题(20
- 1.阻塞I/O模型阻塞IO模型是常见的IO模型,在读写数据时客户端会发生阻塞。阻塞IO模型的工作流程为:1.1在用户线程发出IO请求之后,内
- 枚举(Enum)定义enum关键字用于声明枚举,即一种由一组称为枚举数列表的命名常量组成的独特类型。通常情况下,最好是在命名空间内直接定义枚
- 什么是JPA一种规范,并非ORM框架,也就是ORM上统一的规范spring-boot-starter-data-jpa 
- 目录第一种方式第二种方式第三种方式第四种方式(缺点:将所有的数字类型都会转为字符串)web项目中,Java后端传过来的Long/long类型
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&
- 2018年3月20日,Oracle发布java10。java10为java带来了很多新特性,其中让人眼前一亮的便是var关键字的引入。wha
- 一、基本介绍(Nexus(maven * ))1,如果没有搭建 * 会有什么问题?如果没有 * ,我们所需的所有构件都需要通过 Mave
- SpringBoot入门Demo,一次深夜踩坑记录。springboot小项目开启后,访问端口无反应。首先看我的项目目录:项目的pom文件内