Android 无法请求 Android 13 设备的存储权限

问题描述 投票:0回答:1

在我的 Android 项目中,我要求用户打开相机。除此之外,我还要求获得存储许可。该权限适用于 Android 版本 12 及更低版本,但对于 Android 版本高于 12,则不起作用。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
    android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

碎片

siteSnapButton.setOnClickListener(v -> {
        if (siteImagesCount >= 10) {
            Common.showToast(getActivity(), "you have taken maximum site snaps", Toast.LENGTH_LONG);
            return;
        }
        currentCameraActionRequest = Constants.REQUEST_TAKE_PHOTO_SITE;
        if (checkCameraPermission()) {
            if (checkStoragePermission()) {
                openCamera();
            }
        }
    });

public boolean checkStoragePermission() {
    if (Build.VERSION.SDK_INT < 23) {
        return true;
    }
    int permissionCheck = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
    if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
        // We don't have storage permission; ask for it
        if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
            // User previously denied permission; explain why it is required
            showAlertDialogForPermissions("Storage Permission is required",
                    "You previously denied storage permission, but it is needed in order to save images and files. Go to permissions?");
        } else {
            // Request the permission
            ActivityCompat.requestPermissions(getActivity(),
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    Constants.MY_PERMISSIONS_STORAGE_REQUEST_FOR_CAMERA_CODE);

        }
        return false;
    } else {
        return true;
    }
}

常班

public static final int MY_PERMISSIONS_STORAGE_REQUEST_FOR_CAMERA_CODE = 777;

任何帮助将不胜感激。

android user-permissions
1个回答
0
投票

如果您阅读了权限文档

写_外部_存储

注意:如果您的应用程序面向 Build.VERSION_CODES.R 或更高版本,则此权限无效。

读取外部存储

注意:从 API 级别 33 开始,此权限无效。如果您的应用访问其他应用的媒体文件,请改为请求以下一项或多项权限:READ_MEDIA_IMAGES、READ_MEDIA_VIDEO、READ_MEDIA_AUDIO。了解有关与媒体文件关联的存储权限的更多信息。

您可以看到 Google 限制了这些权限的有效性,使它们无效。

您不受限制将文件写入外部存储。

所以一个可能的解决方案是将

checkStoragePermission
更改为

if (Build.VERSION.SDK_INT < 23 || Build.VERSION.SDK_INT > 32) {
        return true;
    }

因为您已经在清单中设置了它们将工作的最大 api 级别,所以

android:maxSdkVersion="32"

© www.soinside.com 2019 - 2024. All rights reserved.