Я обновляю целевую версию SDK для Android-приложения до 23 (Android M), у которой есть новые разрешения Runtime (https://developer.android.com/training/permissions/requesting.html). Мое приложение объявило WRITE_EXTERNAL_STORAGE в своем манифесте, который теперь должен меня просить во время выполнения. Конечно, я хотел бы только запросить его, когда это необходимо.Как узнать, когда требуется WRITE_EXTERNAL_STORAGE
У меня есть абстракция для разных типов хранения, одна из них реализует локальное хранилище с помощью обычного ввода-вывода файлов (а не содержимого Android Content Provider). В этом классе я получаю путь к файлу (например,/mnt/sdcard/... или/data/data/...) и перед доступом к этому файлу (режим чтения и записи), я хочу проверить, нужно ли мне звонить RequestPermissions
для WRITE_EXTERNAL_STORAGE.
Итак, вопрос: какой самый безопасный и простой способ определить, можно ли читать и записывать файл без этого разрешения (например, поскольку он находится внутри getExternalFilesDir()) или нет?
«В этом классе я получаю путь к файлу» - откуда именно этот путь? Если он исходит из другого места вашего кода, то вы знаете, находится ли он на внешнем хранилище, где бы вы ни создавали этот путь. Если путь поступает извне вашего приложения (например, 'Uri' в« Intent »), тогда IMHO вам лучше всего будет предлагать пользователю разрешение, прежде чем вы сможете получить такой путь, например, при первом запуске ваше приложение. – CommonsWare
Возможны пути: пути могут быть созданы внутри приложения, но я также открываю файлы из Intents. Кроме того, мне приходится иметь дело с путями, которые использовались в предыдущих версиях приложения и хранятся в общих предпочтениях.Я, конечно, не могу спросить всех пользователей, потому что многие пользователи не используют локальное хранилище, а только облачное хранилище. Но я могу спросить, в первый раз они используют любой локальный файл, который не находится во внутреннем каталоге приложения. Я надеялся, что есть лучшее решение. – Philipp
Вы нашли ответ на этот вопрос? Я пытаюсь обновить свое приложение для API 23 и иметь ту же проблему, как я могу узнать, является ли путь внешним путем? – Chen