Предоставляет ли SAF (Storage Access Framework) проблему с WRITE для SD-карты в Android 4.4 (KitKat)?

В Android 4.4 приложения из Play Store могут писать только в свой конкретный каталог приложений (например: /storage/extSdCar/Android/data/com.example.myapp/), и приложениям запрещено писать, кроме этого, каталога на карте micro SD , Поэтому я изучаю новый API SAF, чтобы проверить, могу ли я использовать SAF для записи на микро SD-карту, отличную от специфического для приложения каталога.

Я реализовал SAF, создав образец поставщика и клиентское приложение. В моем провайдере я попытался показать весь контент SD-карты, выполнив следующий код в queryRoots:

row.add(Root.COLUMN_DOCUMENT_ID, getDocIdForFile(new File("/storage/extSdCard"))); row.add(Root.COLUMN_FLAGS, Root.FLAG_SUPPORTS_CREATE | Root.FLAG_SUPPORTS_RECENTS | Root.FLAG_SUPPORTS_SEARCH); 

Я создал для своего клиента следующее намерение, и я могу просматривать весь контент SD-карты через своего провайдера из системного интерфейса SAF.

  Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("*/*"); intent.putExtra(Intent.EXTRA_TITLE, "test.txt"); startActivityForResult(intent, WRITE_REQUEST_CODE); 

Когда я нажимаю кнопку «Сохранить», я получаю ошибку Toast «Не удалось сохранить документ». Но когда я перехожу в каталог приложения (/storage/extSdCar/Android/data/com.example.myprovider/) моего провайдера в Системный пользовательский интерфейс, я могу сохранить документ. Также нет никаких намерений, таких как Intent.CATEGORY_WRITABLE, чтобы я мог получать только документы, которые можно редактировать. Пожалуйста, помогите мне по следующим пунктам:

1. Кажется, что даже если мы используем SAF, ограничение WRITE на карте micro SD остается неизменным. Это верно?

2.Есть ли способ, которым я могу создавать или удалять или изменять уже имеющиеся файлы вне моего конкретного приложения в карте micro SD?

3.Who решает флаг FLAG_SUPPORTS_WRITE для обычных пользовательских файлов, таких как фотографии, видео, музыка, документы и т. Д.?

Solutions Collecting From Web of "Предоставляет ли SAF (Storage Access Framework) проблему с WRITE для SD-карты в Android 4.4 (KitKat)?"

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

Вы можете получить доступ на запись в любом месте на SD-карте, используя указанные ACTION_OPEN_DOCUMENT или ACTION_CREATE_DOCUMENT . В систему встроен ExternalStorageProvider который имеет доступ ко всем SD-картам, и он с радостью делегирует вам доступ на запись, как только он будет подтвержден пользователем по этим намерениям.

Пользователям может потребоваться включить «Настройки> Показать дополнительные устройства», чтобы показать SD-карты, предлагаемые ExternalStorageProvider . Кроме того, если вы хотите ограничить взаимодействие пользователя с локальным хранилищем, вы можете установить EXTRA_LOCAL_ONLY .

Что касается (2), вы можете создавать новые файлы за пределами вашего каталога, ACTION_CREATE_DOCUMENT от пакета, с ACTION_CREATE_DOCUMENT , и вы можете выбрать существующие файлы с намерением. Выбранные пользователем файлы могут быть удалены с помощью DocumentsContract.deleteDocument() .

А для (3) MediaDocumentsProvider встроенный в платформу, в настоящее время не расширяет FLAG_SUPPORTS_WRITE для фотографий, видео и музыки.

Надеюсь это поможет. 🙂