安卓应用中对手机SD卡即外部存储的访问是经常的,安卓手机上,在安卓6.0(API 23)以下,访问只需要在清单文件中添加如下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
在安卓6.0(API 23)及以上系统,考虑到安全,访问手机SD卡时,不但要加上上述权限,还需要在代码中动态申请权限,如下:
private void checkPermissionAndLoadImg() {
int hasWriteExternalPermission =
ContextCompat.checkSelfPermission(mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (hasWriteExternalPermission == PackageManager.PERMISSION_GRANTED) {
//TODO 有权限,做自己的后续操作
} else {
//未授权,申请授权(从相册选择图片需要读取存储卡的权限)
ActivityCompat.requestPermissions((AppCompatActivity) mContext,
new String[] { Manifest.permission.READ_EXTERNAL_STORAGE }, RC_REQUEST_PERMISSION);
}
}
//权限申请成功回调中处理后续操作
@Override
public void requestPermissionResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode == RC_REQUEST_PERMISSION) {
//TODO 权限申请成功,做自己的后续操作
}
}
在安卓10(API 29)系统以下,按照以上步骤执行后,访问手机SD卡都是可以的,但是在安卓10系统上,安装应用后依然没有权限访问手机SD卡。。。原来是10系统上还需要在清单文件中application节点
加上android:requestLegacyExternalStorage="true"
属性,示例如下:
<application
android:name=".MyApplication"
android:allowBackup="true"
android:hardwareAccelerated="true"
android:icon=""
android:largeHeap="true"
android:requestLegacyExternalStorage="true">
至此,以上就是应用在访问手机SD卡进行读写操作时所需要的全部权限申请。
网友评论