在Android 10上使用RNFetchBlob的下载管理器来响应本机下载文件
我需要使用React Native app将文件下载到用户的下载目录,但它似乎与Android 10不兼容,因为我收到错误: 首先,我请求权限: 试一试{ const grated=wait PermissionsAndroid.requestPermissionsAndroid.PERMISSIONS.WRITE\u外部存储; 如果授予===PermissionsAndroid.RESULTS.grated{ 等待实际下载PDF; }否则{ ToastAndroid.show'Nepovolili jste ukládánísouborůdo zařízení',ToastAndroid.LONG; } }犯错误{ console.warnerr; } 然后我尝试下载文件: const res=await RNFetchBlob.config{ AddAndroid下载:{ useDownloadManager:是的, 通知:正确, mime:“应用程序/pdf”, 标题:文件名, 路径:dirs.DownloadDir, }, }.fetch'GET',url{ 授权:“持票人”+Api.持票人, }; Android 10似乎要求开发者打开用户选择对文件夹的写入权限的意图 ,但我不知道如何做,因为RNFetchBlob似乎还没有此功能 有没有办法让这一切顺利进行?它在安卓9上运行良好在Android 10上使用RNFetchBlob的下载管理器来响应本机下载文件,android,react-native,android-10.0,rn-fetch-blob,Android,React Native,Android 10.0,Rn Fetch Blob,我需要使用React Native app将文件下载到用户的下载目录,但它似乎与Android 10不兼容,因为我收到错误: 首先,我请求权限: 试一试{ const grated=wait PermissionsAndroid.requestPermissionsAndroid.PERMISSIONS.WRITE\u外部存储; 如果授予===PermissionsAndroid.RESULTS.grated{ 等待实际下载PDF; }否则{ ToastAndroid.show'Nepovoli
const fileName = 'document.pdf';
const destPath = RNFetchBlob.fs.dirs.DownloadDir + '/' + fileName;
const config = {
fileCache : true,
path: destPath,
addAndroidDownloads: {
title: destPath,
description: `Download ${destPath}`,
useDownloadManager: false,
notification: false,
}
};
const res = await RNFetchBlob.config(config)...
我正在使用这段代码,它在Android 10上运行。我认为您的if子句是错误的。我的工作示例如下所示:
import { PermissionsAndroid } from "react-native";
export const CheckFilePermissions = async (platform) => {
if(platform === 'android') {
try {
const granted = await PermissionsAndroid.requestMultiple([
PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
]);
if (granted['android.permission.READ_EXTERNAL_STORAGE'] && granted['android.permission.WRITE_EXTERNAL_STORAGE']) {
// user granted permissions
return true;
} else {
// user didn't grant permission... handle with toastr, popup, something...
return false;
}
} catch (err) {
// unexpected error
return false;
}
} else {
// platform is iOS
return true;
}
};
您可以像这样使用它:
if(await CheckFilePermissions(Platform.OS)) {
....
your code
....
在AndroidManifest.xml中添加android:requestLegacyExternalStorage=true to
<application
...
android:requestLegacyExternalStorage="true"
>
在安卓Q下使用不同的路径。你可以每天在这里阅读。什么不同的路径?我想把文件安全地下载到文件夹:DYou并不孤单,因为你每天都可以在这里阅读。然后选择另一个目录。如何打开此下载的文件。我面临着安卓系统的问题。对于iOS,它工作得非常好。@SharadSKatre如果您想在应用程序中打开它,可以使用“查看示例”部分。或者,如果您想使用一些本机Android或iOS查看器打开它,请使用react本机文件查看器。