在我的 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;
任何帮助将不胜感激。
如果您阅读了权限文档
注意:如果您的应用程序面向 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"