在Android 10上使用RNFetchBlob的下载管理器来响应本机下载文件

在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

我需要使用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上运行良好

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本机文件查看器。