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

发布于:2024-12-21 ⋅ 阅读:(152) ⋅ 点赞:(0)

权限声明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.


网站公告

今日签到

点亮在社区的每一天
去签到