适配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
猜你喜欢
- 1、配置 IDEA 的 Maven 环境单击菜单栏中的 File → Settings → Build, Ex
- 什么是JSON?JSON (JavaScript Object Notation) is a lightweight data-interc
- Android 中 Tweened animation的实例详解Tweened animation有四种类型,下面主要介绍Scale类型。运
- 本文实例讲述了Android中SeekBar和RatingBar用法。分享给大家供大家参考,具体如下:什么是SeekBar?可以拖动的进度条
- 新手练手必备~密码账户为:先创建账户类:package cn.Atm;/*** @author 偶my耶*/import java.io.*
- 面向对象有封装、继承、多态这三个特性,面向对象编程按照现实世界的特点来管理复杂的事物,把它们抽象为对象,具有自己的状态和行为,通过对消息的反
- 相信有些同学跟我一样,曾经对这个问题很疑惑。在网上也看了一些别人说的观点,评论不一。有说有值传递和引用传递两种,也有说只有值传递的,这里只说
- 在微服务架构下,我们在完成一个订单流程时经常遇到下面的场景:一个订单创建接口,第一次调用超时了,然后调用方重试了一次在订单创建时,我们需要去
- MessageFormat本身与语言环境无关,而与用户提供给MessageFormat的模式和用于已插入参数的子格式模式有关,以生成适用于不
- 一、springboot 自动配置原理先说说我们自己的应用程序中Bean加入容器的办法:package com.ynunicom.dc.di
- 线程中断机制提供了一种方法,用于将线程从阻塞等待中唤醒,尝试打断目标线程的现有处理流程,使之响应新的命令。Java 留给开发者这一自由,我们
- java 中Spark中将对象序列化存储到hdfs摘要: Spark应用中经常会遇到这样一个需求: 需要将JAVA对象序列化并存储到HDFS
- thinking in java3中的多态People are often confused by other, non-object-or
- 首先介绍一些乐观锁与悲观锁:悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个
- 官网教程一、翻转(镜像)头文件 quick_opencv.h:声明类与公共函数#pragma once#include <opencv
- 逆时针画圆弧,原理:将360度分割成36份,分别标出每10度角度时的坐标点,然后将每个点连接起来。 #include <io
- 其实就只有一条sql语句<select id = "search" resultType = "mate
- 没人会喜欢空指针异常!有什么方法可以避免它们吗?或许吧。。本文将讨论到以下几种技术1.Optional类型(Java 8中新引入的)2.Ob
- 1.新建文件上传页面在static目录中新建upload-test.html,上传页面代码如下所示:<!DOCTYPE html>
- 一. Base64编码由来为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASC