当前位置:首页 > 行业动态 > 正文

安卓基础之Android权限系统

Android权限系统通过Manifest声明和运行时动态申请控制应用权限,分普通/危险/特殊三类,危险权限需用户二次授权,保障数据安全与功能正常使用

安卓权限系统详解


权限分类

Android 权限分为多种类型,主要根据其风险等级和用途划分:

权限类型 特点 示例
普通权限 低风险权限,不会直接影响用户隐私或设备安全,安装时自动授予。 ACCESS_WIFI_STATEVIBRATE
危险权限 高风险权限,涉及用户隐私或敏感操作,需在运行时动态申请。 READ_CONTACTSCAMERACALL_PHONE
特殊权限 需要系统级权限或特定签名(如系统应用或同一开发者签名),通常用于系统功能。 INSTALL_PACKAGESGET_TASKS
签名权限 仅允许与应用签名相同的其他应用共享,用于特定场景(如共享文件)。 com.example.MY_PERMISSION

权限机制

  1. 静态声明
    应用在 AndroidManifest.xml 中声明所需权限,

    安卓基础之Android权限系统  第1张

    <uses-permission android:name="android.permission.CAMERA" />
    • 安装时授权:普通权限在安装时自动授予,危险权限需运行时动态申请。
  2. 运行时权限(Android 6.0+)
    危险权限需在运行时动态申请,流程如下:

    • 调用 ContextCompat.checkSelfPermission() 检查是否已授权。
    • 若未授权,调用 ActivityCompat.requestPermissions() 弹出授权对话框。
    • 用户选择后,在 onRequestPermissionsResult() 中处理结果。

权限申请流程

步骤 说明
检查权限 使用 checkSelfPermission() 判断是否已获取权限。
请求权限 若未授权,调用 requestPermissions() 发起请求。
处理用户响应 onRequestPermissionsResult() 中根据用户选择执行逻辑(如授权失败则提示)。
权限被拒绝后的处理 提供替代方案(如禁用功能)或引导用户前往设置手动开启。

权限管理

  1. 用户管理权限

    安卓基础之Android权限系统  第2张

    • 路径:设置 > 应用 > [应用名称] > 权限
    • 可单独关闭危险权限,普通权限无法单独关闭。
  2. Android 11+ 新特性

    • 一次性权限:如位置信息、剪贴板内容,授权后仅生效一次。
    • 自动重置权限:长期未使用的应用,系统可能自动撤销危险权限。

特殊权限与限制

场景 说明
后台定位限制 Android 8.0+ 限制后台应用获取位置信息,需声明 background location 权限。
分区存储(Android 10+) 应用默认只能访问自己的私有目录,访问公共目录需 MANAGE_EXTERNAL_STORAGE
通知权限 Android 13+ 要求应用必须获取通知权限才能发送通知。

相关问题与解答

问题1:如何判断某个权限是否需要动态申请?

解答
根据权限组的风险等级判断:

  • 危险权限组(如 CALENDARCAMERACONTACTS)需要动态申请。
  • 普通权限组(如 LOCATION 中的 ACCESS_COARSE_LOCATION)在安装时自动授权。
    可通过官方文档查询权限所属分组:Android 权限列表。

问题2:用户拒绝权限后,如何优雅处理?

解答

安卓基础之Android权限系统  第3张

  1. 解释原因:提示用户为何需要该权限(如“需要相机权限才能拍摄照片”)。
  2. 提供替代方案:若权限非核心功能,可禁用相关功能或切换为低配模式。
  3. 引导至设置:若用户误拒,可引导其手动开启权限:
    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
    intent.setData(Uri.parse("package:" + getPackageName()));
    startActivity(intent);
0