介绍一下Android6以后动态询问读取内存
时间: 2023-08-17 16:05:06 浏览: 42
从 Android 6.0(API 级别 23)开始,Android 引入了新的权限模型,其中包括“运行时权限”概念。运行时权限允许应用在运行时请求访问受保护的设备功能或敏感数据,例如读取存储卡中的文件。在运行时权限的模型中,应用必须首先向用户请求访问权限,然后用户可以选择授予或拒绝该权限。
对于读取内存的权限,也是需要动态询问的。在 AndroidManifest.xml 文件中声明读取内存权限是不够的,应用必须在运行时请求该权限。以下是请求读取内存权限的步骤:
1. 在 AndroidManifest.xml 文件中声明读取内存权限。
```xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
```
2. 在代码中检查是否已经获得了读取内存权限。如果没有,向用户请求该权限。
```java
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// 没有读取内存权限,请求该权限
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
} else {
// 已经获得了读取内存权限,可以开始读取内存
readExternalStorage();
}
```
3. 处理用户对权限请求的响应。如果用户授予该权限,应用可以开始读取内存。如果用户拒绝该权限,应用应该禁用需要该权限的功能。
```java
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: {
// 如果请求被取消,grantResults 数组将为空
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 用户授予了读取内存权限,可以开始读取内存
readExternalStorage();
} else {
// 用户拒绝了读取内存权限,禁用需要该权限的功能
disableFunctionThatNeedsReadExternalStoragePermission();
}
return;
}
// 处理其他权限的请求响应
}
}
```