2015-05-13 2 views
0

У меня есть приложение, которое реализует свой собственный интерфейс для выбора файлов, что является требованием для работы приложения.KitKat, Framework Access Access, разрешение конкретного файла?

В KitKat файлы на (Внешней) SD-карте должны иметь разрешение, предоставленное через систему доступа к хранилищу, прежде чем их можно будет изменить.

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

Ниже приведен образец из документации. Это возвращает набор всех возможных изображений. Очевидно, я не хочу показывать пользователю все изображения, если я уже могу определить конкретный образ, на который я запрашиваю разрешение. Существуют ли какие-либо другие фильтры, которые бы сузили то, что было представлено пользователю?

(Intent.ACTION_OPEN_DOCUMENT); 
intent.addCategory(Intent.CATEGORY_OPENABLE); 
intent.setType("image/*"); 
+0

«В KitKat файлы на (внешней) SD-карте должны иметь разрешение, предоставленное через систему доступа к хранилищу, прежде чем их можно изменить» - во всех версиях Android все содержимое: // '' Uri' значения имеют связанные разрешения. Рамка доступа к хранилищу не предоставляет доступ к файлам на съемном носителе, кроме как под контролем некоторого «ContentProvider». «Так как эти ограниченные файлы все еще свободно читаемы» - не обязательно, а не бесконечно. Это зависит от того, что предоставляет вам ContentProvider, для временного и необязательного постоянного доступа. – CommonsWare

ответ

0

К сожалению SAF в KitKat не имеет, что передовые возможности.

В зависимости от того, что вам нужно, начиная с API 24 вы можете попросить пользователя предоставить вам разрешение на управление файлами на SD-карте, позвонив по телефону https://developer.android.com/reference/android/os/storage/StorageVolume.html#createAccessIntent(java.lang.String).

В API 21-23 вы можете направить пользователя, чтобы предоставить вам всю SD-карту, вызвав https://developer.android.com/reference/android/content/Intent.html#ACTION_OPEN_DOCUMENT_TREE.

Это даст вам доступ через SAF к SD-карте, и вы можете использовать SAF для отображения/изменения содержимого на SD-карте.