首页 > 解决方案 > Android - 使用权限在特定路径中下载和保存文件

问题描述

我想在我的华为(Android 8)应用程序的下载路径中创建并保存文件。

我在 React Native 应用程序上,我使用rn-fetch-blob模块。

我的方法:

const path = `${RNFetchBlob.fs.dirs.DownloadDir}/offer.txt`;

return RNFetchBlob.fs
  .writeFile(path, offer, 'utf8')
  .then(() => {
    alert('file create');
  })
  .catch(error => console.log(error));

和错误信息:

{ [错误:权限被拒绝] framesToPop:1,代码:'EUNSPECIFIED'}

还有我的 AndroidManifest.xml 文件:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus"/>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

我不明白为什么我有这个权限错误,一切都好吗?

任何人都可以帮助我吗?

谢谢 !

标签: androidreact-nativeandroid-permissions

解决方案


在大于 23 的 Android SDK 版本上,您需要在运行时通过对话框提示请求权限。因此,您必须使用PermissionsAndroidfromreact-native才能实现这一目标。

就像是

try {
    if (Platform.OS === 'android') {
      const granted = yield call(
        PermissionsAndroid.request,
        PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE
      ); // I used redux saga here. 'yield' keywoard. You don't have to use that. You can use async - await or Promises.

      if (granted === PermissionsAndroid.RESULTS.GRANTED) {
        // Your Save flow
      }
    } else {
      // iOS here, so you can go to your Save flow directly
    }
  } catch (e) {
    console.log(e);
  }
}

你应该看看:https ://facebook.github.io/react-native/docs/permissionsandroid


推荐阅读