首页 > 解决方案 > 如何解决 Permission Denial:阅读 com.android.providers.downloads.DownloadStorageProvider

问题描述

我正在使用 react-native-document-picker 从 android 设备获取文件并上传它们。我能够正常选择文件并上传,但只能从“我的文件”中的文件夹中上传。如果我在其他目录中选择一个文件,例如,Recent(打开文档选择器时首先显示的文件),应用程序将立即停止并显示错误:

权限拒绝:从 pid=19089、uid=10372 读取 com.android.providers.downloads.DownloadStorageProvider uri content://com.android.providers.downloads.documents/document/msf:3239 要求您使用 ACTION_OPEN_DOCUMENT 或相关获得访问权限蜜蜂

尽管它是存储在我的文件中的相同文件。我使用了 react-native-image-crop-picker 并且能够在任何目录中选择图像。

下面是我的清单文件和文档选择器函数的代码:

---------------AndroidManifest----------------

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
  
  android:name=".MainApplication"
  android:label="@string/app_name"
  android:icon="@mipmap/ic_launcher"
  android:roundIcon="@mipmap/ic_launcher_round"
  android:allowBackup="false"
  android:theme="@style/AppTheme">
  <meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="AIzaSyCeZH6swcDYvYWT78RhSAQYbE1m_Gt2VXs"/>
  <uses-library android:name="org.apache.http.legacy" android:required="false"/>
  <activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
    android:launchMode="singleTask"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustPan">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
  </activity>
  <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>

---------------DocumentPickerFunction----------------

  let arrFile: FileUploadParam[] = [];

  let pickFile = async () => {
    
DocumentPicker.pick({
      type: [DocumentPicker.types.allFiles],
    }).then((file: any) => {
      
arrFile.push(
        fileStorageService.createFileUploadParam(file.name, file.uri, false),
      );

      fileStorageService.uploadChatAttachs(arrFile).subscribe((result) => {
        let urlArr: MessageAttach[] = [];
        result.map((item: any) => {
          urlArr.push({
            name: item.name,
            storage_filename: item.storage_filename,
            url: item.url,
            type: AttachType.FILE,
          });
        });

        chatService
          .sendAttachFileMessage('', urlArr, roomId)
          .subscribe((message) => {});
        console.log('Upload data', urlArr);
      });
    });
  };

标签: androidreact-native

解决方案


推荐阅读