将图像文件写入SD卡时"Permission Denied"错误



我使用了一个演示项目来获取图像并将其保存到SD卡中,效果很好。但在用相同的代码创建了一个新项目后,它不断地给出"权限被拒绝";错误和IO异常。

xml和gradle文件是从演示项目中复制的,只有几个活动被删除,权限在xml文件中说明

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

也在代码中动态请求

public class PermissionManager {
private static final int REQUEST_CODE_ASK_PERMISSIONS = 1;
private static final String[] PERMISSIONS_ARRAYS = new String[] {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE};
private static List<String> permissionsList = new ArrayList<>();
private PermissionManager() {
}
public static void onResume(final Activity activity) {
boolean isHasPermission = true;
for (String permission : PERMISSIONS_ARRAYS) {
if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {
isHasPermission = false;
break;
}
}
if (!isHasPermission) {
for (String permission : PERMISSIONS_ARRAYS) {
if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) {
permissionsList.add(permission);
}
}
ActivityCompat.requestPermissions(activity,
permissionsList.toArray(new String[permissionsList.size()]), REQUEST_CODE_ASK_PERMISSIONS);
}
}

我发现关于这个问题有几个问题,但如上所示,权限请求和声明都设置好了,它们在旧项目中运行良好,有人能给出一些提示吗?

当您处理媒体文件时,Android 10+上运行的设备有一个新功能,这可能会导致您的问题。对于Android 10,您可以通过在manitest文件中添加以下行来临时选择退出作用域存储:

<application android:requestLegacyExternalStorage="true" ... >

最新更新