Подтвердить что ты не робот

Сохранить файл в общедоступном каталоге с помощью Cordova FileTransfer

Мне нужно загрузить файлы на мобильном устройстве и сделать их доступными для других приложений (с помощью Android и iOS).

Мне удалось загрузить файл на SD-карту (cordova.file.externalDataDirectory), но это существует только на Android, и даже тогда я не могу полагаться на каждое устройство, имеющее SD-карту.

Когда я загружаюсь в хранилище устройств (cordova.file.dataDirectory), файл является приватным для моего приложения и поэтому недоступен для других приложений. Файл можно открыть в InAppBrowser, но я предпочел бы использовать соответствующее приложение по умолчанию.

Есть ли способ получить доступ к общедоступной директории на всех устройствах?

Пути, возвращаемые решением, предложенным в qaru.site/info/500468/..., являются частными на Android...

EDIT:

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

4b9b3361

Ответ 1

В Android всегда существуют внешние каталоги хранения; если устройство не имеет физической SD-карты, Android будет эмулировать его. см. getExternalStorageDirectory:

Примечание. Не путайте слово "внешний" здесь. Этот каталог лучше рассматривать как носитель/общий накопитель. Это файловая система, которая может хранить относительно большой объем данных и все приложения (не применяют разрешения). Традиционно это SD-карту, но она также может быть реализована как встроенное хранилище в устройство, которое отличается от защищенного внутреннего хранилища и может быть смонтирован как файловая система на компьютере.

Поэтому cordova.file.externalDataDirectory всегда будет разрешаться. Однако для обмена данными между приложениями вы, вероятно, захотите использовать корень cordova.file.externalRootDirectory - External storage (SD card). См. cordova-plugin-file.

Таким образом, вы можете хранить файлы в месте, куда проще получить доступ из другого приложения, например. /sdcard/my_shared_data/

В iOS более сложно обмениваться файлами, потому что приложения намеренно изолированы друг от друга из-за политики безопасности, так как Apple "Руководство по взаимодействию между приложениями" говорит:

Службы общаются только косвенно с другими приложениями на устройстве

Лучше всего делать ставку на iOS, чтобы делиться данными, синхронизируя их через iCloud. См. Раздел Настройка контейнера общей Ubiquity для нескольких приложений в iCloud Design Guide, в котором говорится:

... возможно, вы предоставляете два приложения, которые взаимодействуют и нуждаются в доступ к файлам друг друга. В обоих этих примерах вы получаете необходимый доступ, указав общий контейнер для повсеместности, а затем запрашивая доступ к нему из каждого приложения.