2015-09-25 4 views
5

В приложении Android-разработчика cordova (прокрутите вниз до устройства, версии, списка плагинов, все это совершенно актуально на момент написания этой статьи) Я хочу преимущественно хранить файл на внешней SD-карте и использовать внутреннюю память, если SDCard там нет. Я настраиваю мой путь сохранения к:Принудительная внешняя SD-карта на Android с кордовым и файловым плагином

persistentFS= cordova.file.externalDataDirectory||cordova.file.DataDirectory||fileSystem.root.toURL();

его возможного значения файлов: ///storage/emulated/0/Android/data/com.fubar.app/files/, такой же, как cordova.file .externalDataDirectory.

Я поставил: <access origin="cdvfile://*" /> ... <preference name="AndroidPersistentFileLocation" value="Compatibility" /> <preference name="AndroidExtraFilesystems" value="files-external,sdcard,files,documents,cache,cache-external,root" /> в config.xml, <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

в AndroidManifest.xml и устанавливать различные зачарования в index.html метатеге безопасности. Я добавляю, что вставлена ​​SD-карта, включена запись, и я подтверждаю, что могу писать с ней - например, в ящике файлов. Он содержит папку Android/data/com.fubar.myapp/files /, как и следовало ожидать.

Все для ничего: файлы записываются в - и считываются с - внутреннего хранилища устройств. Я прочитал все google, снятые по этой теме, но ничто не приблизило меня к задаче (некоторые люди предлагают использовать плагин с файловыми системами, но, похоже, он был включен в файл плагина).

Любые подсказки? ТИА, Альф

Edit: Использование ADB оболочки, я могу видеть, что внешняя папка SDCard файлов для приложения имеет абсолютный путь:

`/storage/extSdCard/Android/data/com.fubar.myapp/files` 

и вызывая resolveLocalFileSystemURL на

file:///storage/extSdCard/Android/data/com.fubar.myapp/files

счастливо успешно. Я не думаю, что это путь, потому что этот путь зависит от устройства.


Устройство: Samsung Galaxy Вкладка 10,5, леденец 5.0.1 с помощью Cordova 5.3.1, с помощью плагинов: Cordova-плагин-устройство 1.0.1 "Устройство" Cordova-плагин-диалогах 1.1.1 «Уведомление " cordova-plugin-file 3.0.0" Файл " cordova-plugin-file-transfer 1.3.0" Передача файлов " cordova-plugin-media 1.0.1" Media " cordova-plugin-whitelist 1.1.0" Whitelist»

Сложение хост Linux FC21

ответ

2

Yo u может позвонить Context.getExternalFilesDirs(). Это возвращает массив каталогов, в которые ваше приложение может записывать данные. Одним из них будет путь sdcard/storage/sdcardname/Android/data/appname/files.

Большинство производителей также установили переменную среды SECONDARY_STORAGE, чтобы открыть корневой путь SD Card. Вы можете попробовать позвонить System.getenv("SECONDARY_STORAGE")

Android не предоставляет API, который позволяет вам получить путь к корневому пути sdcard. Вы можете использовать отражение и получить корневой путь sdcard из StorageManager.java -> getVolumePaths() - http://androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/os/storage/StorageManager.java#590

+2

Могу ли я сделать это в рамках cordova, в javascript? Если я попытаюсь, Контекст не определен, поэтому я бы предположил, что это Java API, о котором вы говорите. –

0

Поскольку на этот вопрос нет истинного ответа Кордовы, вот что я нашел, используя file plugin. Я также хотел сохранить на SD-карте, а затем данные будут прикреплены к электронной почте, и теперь Gmail требует, чтобы приложение было загружено с SD. Этот блог заставил меня идти в правильном направлении https://www.neontribe.co.uk/cordova-file-plugin-examples/. В разделе говорим о записи файла в основном только заменить

window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function (directoryEntry) { 

с этим

window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function (directoryEntry) { 

И оно должно работать.

+0

Это не работает для меня. Я все еще получаю только путь для внутреннего хранилища (эмулированного) на моем устройстве Galaxy S7. – JaSmin

 Смежные вопросы

  • Нет связанных вопросов^_^