Android - 处理 API 33 及以上版本的存储权限

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

由于 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及以上的存储权限该如何处理?

java android kotlin android-permissions mobile-application
1个回答
0
投票

这样做是为了处理存储权限,您可以更新以适合您需要的存储类型权限。

这处理权限检查并在不可用时进行请求

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;
© www.soinside.com 2019 - 2024. All rights reserved.