阅读量:150
在Android系统中,应用程序的权限分为两类:运行时权限(Runtime Permissions)和系统权限(System Permissions)。运行时权限是在运行时动态申请的,而系统权限是在安装应用时授予的。
对于需要管理权限的应用,通常需要申请系统权限。以下是一些常见的系统权限及其用途:
- READ_EXTERNAL_STORAGE:读取外部存储设备的权限,用于访问用户的图片、视频等文件。
- WRITE_EXTERNAL_STORAGE:写入外部存储设备的权限,用于保存文件到用户的设备上。
- CAMERA:访问设备的摄像头,用于拍照或录像。
- RECORD_AUDIO:访问设备的麦克风,用于录音。
- ACCESS_FINE_LOCATION:访问设备的精确位置信息,用于定位服务。
- READ_CONTACTS:读取用户的联系人信息。
- WRITE_CONTACTS:写入用户的联系人信息。
要申请系统权限,你需要在应用的AndroidManifest.xml文件中声明所需的权限,然后在运行时动态申请权限。以下是一个简单的示例,展示如何在运行时申请READ_EXTERNAL_STORAGE权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
在代码中动态申请权限:
private static final int REQUEST_READ_EXTERNAL_STORAGE = 1;
private void requestReadExternalStoragePermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
REQUEST_READ_EXTERNAL_STORAGE);
} else {
// 已经具有权限,可以执行相关操作
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == REQUEST_READ_EXTERNAL_STORAGE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限被授予,可以执行相关操作
} else {
// 权限被拒绝,提示用户
Toast.makeText(this, "需要READ_EXTERNAL_STORAGE权限才能访问文件", Toast.LENGTH_SHORT).show();
}
}
}
请注意,从Android 6.0(API级别23)开始,需要在运行时动态申请权限。对于Android 11(API级别30)及以上版本,还需要考虑系统权限的约束和分区存储(Scoped Storage)。