React-Native 0.63无法访问Android 10中的设备存储映像

tvz2xvvm  于 2023-02-05  发布在  React
关注(0)|答案(4)|浏览(148)

我使用的是React Native 0.63。我想在FlatList中显示手机设备存储中的图像,并使用<Image/>作为FlatList的renderItem属性。使用source属性,我添加了一个uri键,但我仍然无法看到图像。在FlatList中生成图像块,当我试图滚动列表时,我能够看到右侧的细滚动条。
这就是我显示图像所做的事情。(这里使用的uri是我从CameraRoll.getPhotos() API获得的图像)

<Image
 source={{ uri: 'file:///storage/emulated/0/Pictures/Twitter/20201019_160855.jpg'}}
 style={{ height: 100, width: 100 }}
/>

我已确认以下内容:
1.允许对应用程序具有READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE权限。
1.在文件中添加了file://前缀。
1.确保<Image/>中的source={{ uri: ... }}适用于外部链接,尝试使用谷歌徽标,从互联网上随机JPEG。
我注意到的另一件事是,我正在我的设备上使用Android 10的三星手机,我面临着这个问题.我试着在谷歌Nexus 5 Android模拟器上运行这个,它也运行在Android 10上,工作得很好(通过这个,我的意思是我能够访问模拟器的设备存储,而不是使用上面指定的完全相同的uri).

**更新:**尝试在Android 7上编译应用程序,以上操作正常。SDK版本有问题吗?

tsm1rwdh

tsm1rwdh1#

您是否收到权限被拒绝的错误?
这可能会有所帮助:https://github.com/react-native-image-picker/react-native-image-picker/issues/1259
尝试添加的内容:

android:requestLegacyExternalStorage="true"

...添加到AndroidManifest.xml中的标记。

    • 警告:**

2021年5月5日起:* * Play Store将不接受此实现**并删除所有使用它的应用程序,除非应用程序功能确实需要它,并且需要请求它。
实施将需要使用作用域存储。

xsuvu9jc

xsuvu9jc2#

图像是否正确显示在模拟器上?
如果问题仅出现在您的设备上,您需要检查是否已将android.permission.READ_EXTERNAL_STORAGE添加到AndroidManifest.xml并请求使用文件存储的权限
请参阅:用法-React原生CameraRoll

rjzwgtxy

rjzwgtxy3#

This can be helpful: https://github.com/react-native-image-picker/react-native-image-picker/issues/1259

In manifest
 android:requestLegacyExternalStorage="true"
  
 <application
      android:name=".MainApplication"
      android:label="@string/app_name"
      android:icon="@mipmap/ic_launcher"
      android:allowBackup="true"
      android:theme="@style/AppTheme"
      android:requestLegacyExternalStorage="true"
        android:usesCleartextTraffic="true"> 

  build.gradle

 // camera    
    compileSdkVersion = 29
h7wcgrx3

h7wcgrx34#

我发现存储权限在三星手机中不起作用
所以我在
android/app/src/main/AndroidManifest.xml

<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

更重要的是,这解决了我的问题:
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
然后按常规检查权限,它将正常工作
我对React原生APP的配置

"react": "18.1.0",
"react-native": "0.70.6",

buildToolsVersion = "31.0.0"
minSdkVersion = 22
compileSdkVersion = 33
targetSdkVersion = 33

这在我的情况下工作👍👍Happy Hacking😂

相关问题