Android - использует-разрешение на скачивание и сохранение файла по определенному пути - PullRequest
0 голосов
/ 28 сентября 2018

Я хотел бы создать и сохранить файл в разделе Путь загрузки в моем приложении Huawai (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"/>

Я не понимаю, почему у меня ошибка разрешения, все хорошо?

Кто-нибудь может мне помочь?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

В версиях Android SDK больше 23 вам необходимо запрашивать разрешения, когда они необходимы во время выполнения, через диалоговое окно.Таким образом, вам придется использовать PermissionsAndroid из react-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

0 голосов
/ 28 сентября 2018

Для версии 6 и выше вы должны добавить разрешение времени выполнения.Вы можете использовать эту заглушку для добавления разрешения. Плагин разрешений

Также вы можете проверить разрешение в Настройках -> Приложение -> Ваше приложение -> Разрешения

...