Записать файл в корневой каталог SD-карты с помощью приложения ionic / cordova - PullRequest
0 голосов
/ 09 октября 2018

Мне нужно записать файл в корневой каталог SD-карты.Я использую функцию getExternalSdCardDetails () из cordova-диагностический-плагин .И получите что-то вроде этого:

[{
     "path": "/storage/4975-1401/Android/data/cordova.plugins.diagnostic.example/files",
     "filePath": "file:///storage/4975-1401/Android/data/cordova.plugins.diagnostic.example/files",
     "canWrite": true,
     "freeSpace": 16254009344,
     "type": "application"
 }, {
     "path": "/storage/4975-1401",
     "filePath": "file:///storage/4975-1401",
     "canWrite": false,
     "freeSpace": 16254009344,
      "type": "root"
}]

Итак, я не могу написать file:///storage/4975-1401, потому что "canWrite": false Я добавил

<preference name="AndroidPersistentFileLocation" value="Compatibility" />
<preference name="AndroidExtraFilesystems" value="files,files-external,documents,sdcard,cache,cache-external,assets,root" /> 

к config.xml и

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

до AndroidManifest.xml, но безрезультатно, когда я пытаюсь записать файл в корневой каталог, я получаю ошибку CODE 5 ENCODING_ERR

Запись в /storage/4975-1401/Android/data/cordova.plugins.diagnostic.example/files работает.

1 Ответ

0 голосов
/ 09 октября 2018

Начиная с Android 4.4 Kitkat, несистемные приложения имеют разрешение только на чтение для вторичных томов хранения (например, съемных SD-карт) вне своей области изолированной программной среды приложения (/Android/data/[package-id]/). Более подробное объяснение см. Здесь .

Таким образом, функция getExternalSdCardDetails() правильно информирует вас о том, что вы можете записать в каталог изолированной программной среды приложения /storage/4975-1401/Android/data/cordova.plugins.diagnostic.example/files, но не в корневой каталог /storage/4975-1401/.

Нет способа обойти это на Android 4.4 и выше, если устройство не рутировано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...