Android 6.0(API 23)前的运行时权限机制解析

老浩姑娘_1628

老浩姑娘_1628

2026-09-11

637人浏览

原创

Android 6.0(API 23)前的运行时权限机制解析

Android 6.0(API 23)之前,位置等危险权限在安装时即被系统一次性授予,无运行时动态控制能力,因此 checkSelfPermission 在 API 21/22 上恒返回 PERMISSION_GRANTED,与用户是否点击对话框无关。

android 6.0(api 23)之前,位置等危险权限在安装时即被系统一次性授予,无运行时动态控制能力,因此 `checkselfpermission` 在 api 21/22 上恒返回 `permission_granted`,与用户是否点击对话框无关。

在 Android 系统演进中,权限模型存在根本性分水岭:API 23(Android 6.0 Marshmallow)是运行时权限(Runtime Permissions)的起始版本。在此之前(包括 API 21 Lollipop 和 API 22),所有 <uses-permission></uses-permission> 声明的权限(如 ACCESS_FINE_LOCATIONREAD_EXTERNAL_STORAGE 等)均属于“安装时权限”(Install-time permissions)。系统在应用安装阶段即完成全部权限授予,用户无法在运行时撤销或拒绝单个权限——这意味着:

  • 调用 ContextCompat.checkSelfPermission()PermissionChecker.checkSelfPermission() 永远返回 PackageManager.PERMISSION_GRANTED(只要该权限已声明于 AndroidManifest.xml 中);
  • ActivityCompat.shouldShowRequestPermissionRationale() 恒为 false(因从未存在过“拒绝后再次请求”的语义);
  • requestPermissions() 方法虽可调用,但实际不会弹出任何权限对话框,仅触发回调(如 onRequestPermissionsResult),且结果始终为 GRANTED

因此,你在 API 21 设备上观察到的 Log.d("request_Permission 21:", "has been granted!") 并非逻辑错误,而是符合历史设计的事实行为。此时所谓“权限对话框出现”,实为你的自定义 PermissionDialog.showForResult(...) 手动弹出(与系统无关),而 checkSelfPermission 的返回值早已确定,与 UI 状态完全解耦。

✅ 正确的兼容性处理应遵循以下原则:

  1. 按 SDK 版本分流逻辑

    Tiktok Android
    Tiktok Android

    使用ADB自动化Android上的TikTok互动。搜索话题,使用AI或模板评论,包含设置向导。用于TikTok自动化营销和通过策略性评论建立社交影响力。

    下载
    • API ≥ 23:走标准运行时权限流程(requestPermissions + onRequestPermissionsResult);
    • API 跳过所有运行时检查与请求逻辑,直接执行定位功能(因权限必已授予);
  2. 避免冗余判断
    不应在 API 21/22 中调用 shouldShowRequestPermissionRationale 或尝试“请求”权限——既无效,也易引发混淆。

示例修正代码(Kotlin 风格,推荐使用 ActivityResultLauncher):

private val locationPermissionLauncher = registerForActivityResult(
    ActivityResultContracts.RequestPermission()
) { isGranted ->
    if (isGranted) {
        startLocationUpdates() // ✅ 安全执行
    } else {
        showPermissionDeniedHint()
    }
}

fun requestLocationPermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        locationPermissionLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION)
    } else {
        // API <p>⚠️ 注意事项:</p>
  • 不要为 API 21/22 实现“模拟运行时权限”的逻辑(如弹窗+假校验),这违背平台契约,且导致行为不一致;
  • PermissionChecker 是旧版 Support Library 提供的兼容工具,仅用于低版本兜底,不应替代 ContextCompat.checkSelfPermission,更不可用于判断 API 23 前的“真实授权状态”(因其本质就是恒真);
  • 若目标 SDK ≥ 31(Android 12),还需额外适配大致位置(Approximate Location) 新特性,区分 ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION 的用户选择粒度。

总结:API 21/22 的 checkSelfPermission 恒为 GRANTED,不是 Bug,而是 Android 权限模型演进的历史必然。开发者需以版本为纲,精准分流,方能写出健壮、可维护的位置权限逻辑。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
android开发三大框架
android开发三大框架

android开发三大框架是XUtil框架、volley框架、ImageLoader框架。本专题为大家提供android开发三大框架相关的各种文章、以及下载和课程。

2023.08.14

862

4

android是什么系统
android是什么系统

Android是一种功能强大、灵活可定制、应用丰富、多任务处理能力强、兼容性好、网络连接能力强的操作系统。本专题为大家提供android相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.22

2447

5

android权限限制怎么解开
android权限限制怎么解开

android权限限制可以使用Root权限、第三方权限管理应用程序、ADB命令和Xposed框架解开。详细介绍:1、Root权限,通过获取Root权限,用户可以解锁所有权限,并对系统进行自定义和修改;2、第三方权限管理应用程序,用户可以轻松地控制和管理应用程序的权限;3、ADB命令,用户可以在设备上执行各种操作,包括解锁权限;4、Xposed框架,用户可以在不修改系统文件的情况下修改应用程序的行为和权限。

2023.09.19

4437

7

android重启应用的方法有哪些
android重启应用的方法有哪些

android重启应用有通过Intent、PendingIntent、系统服务、Runtime等方法。本专题为大家提供Android相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

545

5

Android语音播放功能实现方法
Android语音播放功能实现方法

实现方法有使用MediaPlayer实现、使用SoundPool实现两种。可以根据具体的需求选择适合的方法进行实现。想了解更多语音播放的相关内容,可以阅读本专题下面的文章。

2024.03.01

904

5

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

2026.09.16

140

9

ai生成视频的工具免费版合集
ai生成视频的工具免费版合集

本专题汇总了当前免费AI生成视频工具的排行榜与推荐清单,涵盖seko、讯飞智作、AniShort及剧云、Lovart等多模型集成平台。同时整理了各工具的免费额度、输出时长、水印政策及适用场景差异,助您快速选择合适工具开启AI视频创作。

2026.09.16

60

10

Pandas时间序列分析与可视化报表
Pandas时间序列分析与可视化报表

本专题整理Pandas日期转换、时间索引、重采样、滚动窗口、时区处理、plot绘图、Styler表格样式和报表输出方法。

2026.09.16

60

23

Pandas数据筛选索引与清洗处理
Pandas数据筛选索引与清洗处理

本专题整理Pandas中的loc、iloc、条件筛选、query查询、缺失值处理、重复值删除、类型转换和字符串列清洗方法。

2026.09.16

40

25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 42.9万人学习

Java 教程
Java 教程

共578课时 | 185.5万人学习

Uniapp从零开始实现新闻资讯应用
Uniapp从零开始实现新闻资讯应用

共64课时 | 9.2万人学习