Я пишу приложение для Android на NativeScript.
Я определил необходимые разрешения в App_Resources/Android/AndroidManifest.xml
:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Я знаю, что этого недостаточно для доступа к хранилищу, поэтому я запросил разрешение во время выполнения и проверил его в системных настройках.
После загрузки изображения браузером в папку «Загрузки» я хочу прочитать его в своем приложении. Первоначально я получил путь к файлу от nativescript-mediafilepicker
, но, насколько мне известно, я использую следующий фрагмент:
console.log(fs.File.exists('/storage/emulated/0/Download/7zoVG9uML7AyjwHl.png'));
const file = fs.File.fromPath('/storage/emulated/0/Download/7zoVG9uML7AyjwHl.png');
file.readSync(e => console.log('ERROR ' + e));
которые печатают в консоли:
JS: true
JS: ERROR Error: java.io.FileNotFoundException: /storage/emulated/0/Download/7zoVG9uML7AyjwHl.png: open failed: EACCES (Permission denied)
Что я делаю не так?
ОБНОВЛЕНИЕ Я добавил WRITE_EXTERNAL_STORAGE
разрешение, но оно не действует:
permissions.requestPermissions(p).then(async () => {
const publicDirectory = android.os.Environment.getExternalStoragePublicDirectory(android.os.Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
const fullPath = `${publicDirectory}/7zoVG9uML7AyjwHl.png`;
const file = fs.File.fromPath(fullPath);
file.readSync(e => console.log('ERROR ' + e));
});
JS: ERROR Error: java.io.FileNotFoundException: /storage/emulated/0/Download/7zoVG9uML7AyjwHl.png: open failed: EACCES (Permission denied)
android.os.Environment.getExternalStoragePublicDirectory(android.os.Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
, теперь вы можете передать этот путь в файловую систему. - person Manoj   schedule 01.04.2020