Когда дело доходит до разрешений времени выполнения M Developer Preview, в соответствии с Google:
-
Если вы никогда не запрашивали определенное разрешение раньше, просто спросите его
-
Если вы спросили раньше, и пользователь сказал "нет", а затем пользователь пытается сделать что-то, что требует отклоненного разрешения, вы должны попросить пользователя объяснить, почему вам нужно разрешение, прежде чем вы перейдете к снова запросите разрешение
-
Если вы попросили пару раз раньше, и пользователь сказал "нет и перестанет спрашивать" (используя флажок в диалоговом окне разрешения времени выполнения), вы должны просто перестать беспокоиться (например, отключить пользовательский интерфейс, который требует разрешения)
Однако у нас есть только один метод shouldShowRequestPermissionRationale()
, возвращающий boolean
, и мы имеем три состояния. Нам нужен способ отличить никогда не запрашиваемое состояние от состояния остановки, поскольку мы получаем false
от shouldShowRequestPermissionRationale()
для обоих.
Для запросов, запрашиваемых при первом запуске приложения, это не большая проблема. Существует множество рецептов для определения того, что это, вероятно, первый запуск вашего приложения (например, boolean
значение в SharedPreferences
), и поэтому вы предполагаете, что если это первый запуск вашего приложения, вы никогда не будете -заполненное состояние.
Тем не менее, часть видения разрешений во время выполнения - это то, что вы не можете просить их всех. Разрешения, привязанные к дополнительным функциям, о которых вы можете попросить позже, когда пользователь нажимает на то, что требует этого разрешения. Здесь приложение может быть запущено много раз в течение нескольких месяцев, прежде чем нам вдруг потребуется запросить другое разрешение.
В этих случаях мы должны отслеживать, просили ли мы сами разрешения? Или есть что-то в Android M API, который мне не хватает, что говорит нам, спрашивали мы раньше или нет?