当前位置: 首页 > article >正文

Android 16 关于动态权限使用的变更

权限声明code

在 Android 中,权限的申请分为静态权限和动态权限。

静态权限

静态权限是指在应用的 AndroidManifest.xml 文件中声明的权限。这些权限在应用安装时就会被用户授予。常见的静态权限包括访问互联网、读取用户联系人等。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">

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

    <!-- 这种要特定系统app才能声明,不然运行时报错 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 
</manifest>

动态权限

动态权限是指在运行时请求用户授权的权限。这种权限机制从 Android 6.0(API 23)开始引入。用户可以在运行时选择是否授予应用某些权限。

申请动态权限的步骤:

  1. 检查权限:在请求权限之前,先检查是否已经获得了该权限。
  2. 请求权限:如果权限未被授予,则请求该权限。
  3. 处理权限请求结果:用户作出响应后,需要处理权限请求的结果。
// 检查权限
if (ContextCompat.checkSelfPermission(this, 
        Manifest.permission.READ_CONTACTS) 
        != PackageManager.PERMISSION_GRANTED) {
    
    // 如果没有权限,则请求权限
    ActivityCompat.requestPermissions(this, 
            new String[]{Manifest.permission.READ_CONTACTS}, 
            MY_PERMISSIONS_REQUEST_READ_CONTACTS);
} else {
    // 已经获得权限,可以执行相关操作
}

// 处理权限请求结果
@Override
public void onRequestPermissionsResult(int requestCode, 
                                       String[] permissions, 
                                       int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_CONTACTS:
            if (grantResults.length > 0 
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 权限被授予
            } else {
                // 权限被拒绝
            }
            break;
    }
}

Google 变更说明

  • Google 对权限树和动态权限的支持将被废弃,将在Android 16(25Q2)中弃用相关API,如果没有人使用这些API,Google 可能也会在25Q2中将这些API变为无操作。
  • Google 鼓励开发者在应用程序清单中静态声明他们的权限,而不是动态定义权限。

Google will deprecate the some related APIs of permission trees and dynamic in Android 16 (25Q2).

APP list as below:

  • PackageManager#addPermission
  • PackageManager#addPermissionAsync
  • PackageManager#removePermission

Google Suggetion:  developers to declare their permissions statically inside their app manifest.


http://www.kler.cn/a/448571.html

相关文章:

  • ChatGPT接口测试用例生成的流程
  • c++--------c++概念
  • 安卓环境配置及打开新项目教程,2024年12月20日最新版
  • 时间序列异常值检测方法
  • Ubuntu搭建ES8集群+加密通讯+https访问
  • 探秘C语言:从诞生到广泛应用的编程世界
  • 监控易在汽车制造行业信息化运维中的应用案例
  • 论文浅尝 | HippoRAG:神经生物学启发的大语言模型的长期记忆(Neurips2024)
  • 带有 Elasticsearch 和 Langchain 的 Agentic RAG
  • 使用Wireshark导出数据包中的文件
  • uniapp开发微信小程序优化项目
  • LiteFlow决策系统的策略模式,顺序、最坏、投票、权重
  • Python中定义函数的操作及理解
  • 前端和后端解决跨域问题的方法
  • 时空信息平台架构搭建:基于netty封装TCP通讯模块(IdleStateHandler网络连接监测,处理假死)
  • 【电商推荐】平衡效率与效果:一种优化点击率预测的LLM融合方法
  • 如何减小wsl的磁盘占用空间
  • JAVA基础:JavaDoc生成文档
  • 【论文解读】CVPR 2019 目标检测:CenterNet技术,以点代框,可扩展性强(附论文地址)
  • 音视频学习(二十五):ts
  • 【03-数据库面试】
  • HTML基础学习(1)
  • 网络安全(5)_访问控制列表ACL
  • 速通Python 第二节
  • redis数据转移
  • Linux快速入门-兼期末快速复习使用