Intereting Posts
Как снять отметку с отмеченных элементов в режиме навигации? Ошибка при вставке в исходное состояние при отладке приложений Android Как исправить этот код все экраны андроида Исключение, возникшее во время рендеринга: java.lang.System.arraycopy ([CI [CII) V Сведения о исключении регистрируются в окне> Показать представление> Журнал ошибок Я не могу найти файл adb_usb.ini в папке .android? Платформа Android с использованием layout_weight, layout_width и maxWidth Как предоставить настраиваемый цвет текста для одного элемента меню в NavigationView? В Android, как переформатировать представления? Google+ выйдет из другой деятельности Как вы обрабатываете транзакции фрагментов, когда состояние родительской активности обязательно сохраняется? Загрузчик не может быть перезапущен после изменения ориентации Переопределить переменную json для ключевого слова Какой документ является Play Store, ожидающий загрузки, чтобы показать, что я не выдаю себя за других? Как получить ширину и высоту отображаемого изображения в android? Как получить Mat с возможностью ввода в Android с помощью OpenCV

Предоставляет ли 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 для фотографий, видео и музыки.

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