Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 29/Q上MediaScanner scanFile/CameraRoll的替代方案_Android_React Native_React Native Android_Mediastore_Scoped Storage - Fatal编程技术网

Android 29/Q上MediaScanner scanFile/CameraRoll的替代方案

Android 29/Q上MediaScanner scanFile/CameraRoll的替代方案,android,react-native,react-native-android,mediastore,scoped-storage,Android,React Native,React Native Android,Mediastore,Scoped Storage,Google Play Store使用清单标志requestLegacyExternalStorage,对Android范围内的应用程序存储提出了新的要求 我的应用程序正在使用不支持作用域存储(并且需要requestLegacyExternalStorage标志才能工作)且时间非常短(2021年5月5日)。CameraRoll还有其他选择吗? 这里的目标是在用户图库应用程序中显示图像,如谷歌照片或供应商默认图库,而无需在用户端执行额外操作 原始谷歌播放消息: 从5月5日开始,您必须让我们知道为

Google Play Store使用清单标志
requestLegacyExternalStorage

对Android范围内的应用程序存储提出了新的要求 我的应用程序正在使用不支持作用域存储(并且需要
requestLegacyExternalStorage
标志才能工作)且时间非常短(2021年5月5日)。CameraRoll还有其他选择吗? 这里的目标是在用户图库应用程序中显示图像,如谷歌照片或供应商默认图库,而无需在用户端执行额外操作

原始谷歌播放消息:

从5月5日开始,您必须让我们知道为什么您的应用程序需要广泛的存储访问权限APPNAME 14 avr。2021 19:26
我们检测到您的应用程序在1个或多个应用程序捆绑包或APK的清单文件中包含requestLegacyExternalStorage标志。
在运行Android 11+的设备上运行应用程序的开发人员必须使用作用域存储,以便用户更好地访问其设备存储。要在5月5日之后在Android 11或更高版本上发布应用程序,您必须:
更新应用程序,以使用更隐私友好的最佳做法,如存储访问框架或媒体商店API
更新你的应用程序,在清单文件中声明所有文件访问(管理外部存储)权限,并从5月5日起在Play Console中完成所有文件访问权限声明
完全从应用程序中删除“所有文件访问”权限
对于针对Android 11的应用程序,requestLegacyExternalStorage标志将被忽略。必须使用“所有文件”访问权限才能保留广泛访问权限。

在未经允许的情况下请求访问所有文件访问权限的应用程序将从Google Play中删除,您将无法发布更新。
深入研究ReactNative CameraRoll软件包,它不仅仅是扫描文件,让操作系统显示在用户库应用程序中。 这里的解决方案是一些再聚焦:

  • 图像需要位于公共目录中,才能在任何多媒体资料应用程序中显示(=读取访问),因此不在应用程序外部存储中:

    • 不是:
      storage/android/data/com.example/Pictures
    • 图片
      DCIM
      下载
      (检查
      环境.目录\u DCIM
  • 需要android的本机软件包吗

  • 守则:

    反应本机部分:

    从“react native fs”导入RNFS
    const{PNModule}=ReactNative.NativeModules
    试一试{
    如果(Platform.OS=='android'&&Platform.Version>=29){
    //谷歌要求在针对android 11时不再使用requestLegacyExternalStorage,并使用
    //作用域存储或新的全局权限,请参阅https://gitlab.inria.fr/floristic/pn-mobile-test/-/issues/417
    //这里的解决方案是使用MediaStore API并将文件复制到DCIM文件夹的自定义模块。
    const segments=path.split(“/”)
    const fileName=segments[segments.length-1]
    const fileUriPath=wait PNModule.moveToMediaStore(path.replace('file://',''),文件名)
    如果(!fileUriPath){
    返回空
    }
    const scanResult=await RNFS.scanFile(fileUriPath)
    if(fileUriPath.startsWith('file://')){
    返回文件路径
    }
    返回`file://${fileUriPath}`
    }
    返回等待CameraRoll.save(路径)
    }捕获(错误){
    控制台错误(错误)
    }
    
    本机软件包 (别忘了用你的应用文件夹替换
    APPNAME

    @ReactMethod
    public void moveToMediaStore(字符串文件路径、字符串文件名、承诺){
    if(Build.VERSION.SDK_INT