由于 Google 的隐私政策更新,如果您的应用程序的主要目的不是连续访问存储/图库(如社交媒体应用程序),并且 READ_MEDIA_IMAGES 或 MANAGE_EXTERNAL_STORAGE ,Google 不会批准该应用程序在 Play 商店上发布在 Manifest 文件中声明。谷歌表示可以使用图像选择器(对图库的有限访问)来代替这些权限。
但由于应用程序支持多种版本(API 23及以上),在API 33及以上设备上请求权限时,READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限控制会返回false,因此虽然Image Picker无法执行相关操作已使用。
我正在做的事情的伪代码:
if(hasStoragePermission()){
doSomething() // like access galery
}else{
requestStoragePermission()
}
fun hasStoragePermission() : Boolean {
return
if (Build.Version_Code >= Tiramisu){
true // I know that this way is not good but if I control the READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE, it returns false
}else{
hasPermission(READ_EXTERNAL_STORAGE) && hasPermission(WRITE_EXTERNAL_STORAGE)
}
}
fun requestStoragePermission() : Boolean {
if (Build.Version_Code >= Tiramisu){
requestPermission(READ_EXTERNAL_STORAGE)
}else{
requestPermission(READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE)
}
}
注意:如果您的应用程序面向 Build.VERSION_CODES.R 或更高版本,则 WRITE_EXTERNAL_STORAGE 无效。
长话短说,我对所有支持的 API 使用 Image Picker,但 API 32 及更低版本,我必须请求读取和写入外部存储,因此我正在正确请求和检查状态。但是,由于隐私政策,API 33 及更高版本我无法请求任何存储或媒体相关权限。
API 33及以上的存储权限该如何处理?
这样做是为了处理存储权限,您可以更新以适合您需要的存储类型权限。
这处理权限检查并在不可用时进行请求
import { PermissionsAndroid, Platform } from 'react-native';
const hasAndroidPermission = async () => {
if (Platform.OS !== 'android') return true;
const androidVersion = Platform.constants?.Release || 0;
if (Number(androidVersion) >= 11) return true; // Android 10+ doesn't need WRITE_EXTERNAL_STORAGE
const permission = PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE;
const hasPermission = await PermissionsAndroid.check(permission);
if (hasPermission) return true;
const status = await PermissionsAndroid.request(permission);
return status === PermissionsAndroid.RESULTS.GRANTED;
};
export default hasAndroidPermission;