课程进度 68% · 第8/11章第8/11章 · 标签 1/2
— 1 —
运行时权限
Android 6.0(API 23)引入了运行时权限机制。敏感权限需要在运行时向用户申请,用户可随时在设置中撤销。
java
1
// AndroidManifest.xml 声明权限
2
<uses-permission android:name="android.permission.CAMERA" />
3
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
4
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
5
6
// 运行时权限申请
7
if (ContextCompat.checkSelfPermission(this,
8
Manifest.permission.CAMERA)
9
!= PackageManager.PERMISSION_GRANTED) {
10
ActivityCompat.requestPermissions(this,
11
new String[]{Manifest.permission.CAMERA}, REQUEST_CODE);
12
} else {
13
openCamera();
14
}
15
16
// 处理权限结果
17
18
public void onRequestPermissionsResult(int requestCode,
19
String[] permissions, int[] grantResults) {
20
if (requestCode == REQUEST_CODE
21
&& grantResults.length > 0
22
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
23
openCamera();
24
}
25
}
— 2 —
权限分类
- 正常权限 —— 安装时自动授予,如 INTERNET、ACCESS_NETWORK_STATE
- 危险权限 —— 需运行时申请,如相机、位置、麦克风、存储
- 特殊权限 —— SYSTEM_ALERT_WINDOW、WRITE_SETTINGS,需特殊处理
◆
权限最佳实践
- 在使用功能时才申请权限,不要安装后立即申请
- 提供解释说明为什么要该权限(Android 官方推荐)
- 处理用户拒绝"不再询问"的情况,引导用户到设置页面
- 使用 shouldShowRequestPermissionRationale() 判断是否需解释
!用户拒绝权限后应用仍需正常工作,必须有降级方案