Android 版本适配:8.x Oreo(API 级别 26、27)

本文详细介绍了Android 8.0(API级别26、27)的版本适配,包括运行时权限优化、安装未知来源应用的处理、通知渠道的新增、隐式广播限制及新的悬浮窗类型。适配工作涉及动态权限申请、安装权限授权、自定义通知渠道创建、BroadcastReceiver的动态注册以及悬浮窗类型的调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版权声明:本文为博主原创文章,未经博主允许不得转载
文章分类:Android知识体系 - 版本适配

一、前言

本文主要是从官方文档中筛选出一些常见的适配项,若有任何纰漏或需要补充的,欢迎大家在评论区指出。

二、版本适配

1. 运行时权限授予优化

Android 8.0 及以上系统对运行时权限的授予进行了优化,以下是官方文档的原文:

在 Android 8.0 之前,如果应用在运行时请求权限并且被授予该权限,系统会错误地将属于同一权限组并且在清单中注册的其他权限也一起授予应用。

对于针对 Android 8.0 的应用,此行为已被纠正。系统只会授予应用明确请求的权限。然而,一旦用户为应用授予某个权限,则所有后续对该权限组中权限的请求都将被自动批准。

例如,假设某个应用在其清单中列出 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE。应用请求 READ_EXTERNAL_STORAGE ,并且用户授予了该权限。如果该应用针对的是 API 级别 24 或更低级别,系统还会同时授予 WRITE_EXTERNAL_STORAGE,因为该权限也属于同一 STORAGE 权限组并且也在清单中注册过。如果该应用针对的是 Android 8.0,则系统此时仅会授予 READ_EXTERNAL_STORAGE;不过,如果该应用后来又请求 WRITE_EXTERNAL_STORAGE,则系统会立即授予该权限,而不会提示用户。

也就是说,我们的应用在 Android 8.0 之前,如果在权限注册清单中列出 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 权限:

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

那么在动态获取 READ_EXTERNAL_STORAGE 权限之后,直接使用 WRITE_EXTERNAL_STORAGE 权限相关的操作时并不会出现任何问题,因为系统已经将同一权限组并且出现在清单中的其他权限都一并授予给了我们。

但这一行为在 Android 8.0 及以上版本的系统中就会出现问题,系统会抛出缺失权限相关的异常。因此,我们在使用 WRITE_EXTERNAL_STORAGE 权限相关的操作之前需要再次动态向系统申请权限,然后系统会自动将权限授予给我们(由于我们之前已经获取了同一权限组中的其他权限,因此不需要再次弹出窗口让用户确认)。

有关权限组更多的介绍请至官方的权限说明文档,以下是从文档中截取的关于权限分组的表格:

2. 安装未知来源应用

参考资料:Making it safer to get apps on Android O

在 Android 8.0 之前的系统,用户若从官方应用商店之外的来源安装应用时࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值