android - 如何解决 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);
});
});
};
解决方案
推荐阅读
- python - Call class as function without staticmethod and classmethod and instantiating
- linux - Loading executable or executing a library
- vba - 将分类电子邮件的详细信息导出到 Excel
- mysql - 如何提高这个慢查询的性能?
- jquery - 没有jqueryui的拖放?
- apache-spark - Spark 的 GraphX:为什么我得到“加入/区分具有不同索引的两个 VertexPartition 很慢”,即使在持久化了所涉及的 RDD 之后也是如此
- android - Custom command requires calling CMake three times to have desired output
- python - 在收敛迭代期间更新 3d python 图
- laravel - 如何为 Laravel 工厂使用自定义值列表,维护订单并仍在使用 Faker 外观?
- laravel - Laravel 社交名媛登录:不同的 Facebook 应用程序