Возможно ли иметь "дополнительные" разрешения в Android?
Есть ли какой-либо способ для приложения Android объявить запрашиваемые разрешения как необязательные?
т.е. Я хочу написать приложение, которое запрашивает набор разрешений, например. одним из которых является доступ к пользовательским контактам. Теперь приложение может работать и делать полезные вещи без этого разрешения доступа, но оно может сделать больше, если оно предоставлено.
Есть ли способ и приложение сказать "Я хочу разрешение X, но вы можете отказаться от него, и в этом случае я счастлив работать со сниженной функциональностью?"
Ответы
Ответ 1
Я так не считаю, так как разрешения установлены в манифесте и принимаются пользователем при установке .apk. Вы можете создать легкую версию приложения с ограниченными разрешениями и ограниченным набором функций и предложить его в качестве альтернативы.
Ответ 2
Он не поддерживается и не разрабатывается на данный момент. Star issue 6266 на Android-трекер, если вы хотите, чтобы он был реализован.
Ссылка: http://code.google.com/p/android/issues/detail?id=6266
Ответ 3
Можно предоставить привилегии уже установленному приложению, не запрашивая разрешения в главном приложении и создавая другое приложение ( "заглушку" ) с использованием того же android:sharedUserId
, который запрашивает функции. Затем вы можете проверить, установлено ли приложение-заглушка, если
context.checkCallingOrSelfPermission(permission) == PackageManager.PERMISSION_GRANTED
оценивает значение true (с контекстом как допустимым контекстом и разрешением как одной из строк прав). Если это правда, ваше приложение-заглушка установлено, и вы можете разблокировать функции, требующие разрешений. Если это неверно, вы просто возвращаетесь к основным функциям.
При разработке своего приложения таким образом вы можете легко ввести дополнительные разрешения в основной apk, не меняя никакого кода, например, если вы распространяете несколько версий.
Теперь вы можете запрашивать привилегии от пользователя, инициируя установку (одного из) ваших заглушек (-ов). Поэтому, если ваши привилегии необходимы после ввода какого-либо пользователя в действие, запустите apk, чтобы всплывать, если привилегия не была предоставлена (конечно, вы можете указать объяснительную деятельность перед ней) и выполнить функцию при возврате из диспетчер пакетов или когда разрешение было предоставлено ранее. Вы также можете включить или отключить разрешения где-то в ваших предпочтениях или в диалоговом окне firstrun.
Для ленивых людей (например, я) короткое резюме о том, как привести установщик пакетов: Создайте Intent
с помощью Intent.ACTION_VIEW
для file://
-URI, используя Type "application/vnd.android.package-archive"
. Активы и Ressources не работают напрямую, вы можете, например, связать его как ресурс и скопировать его в папку кэша или аналогичную.
Предупреждение:. Этот ответ может не соответствовать Google Play ToS, так как этот метод имеет некоторые проблемы при удалении (возможно, утечка приложений, см. ниже), особенно при удалении через сторонние механизмы (например, в Google Play, поскольку пользователь не видит вспомогательные приложения, использующие эти методы), а также как необязательные привилегии не могут отображаться в магазине воспроизведения afaik.
Для проблем с удалением я бы рекомендовал использовать такие имена, как "Разрешения MyApp: XXX", учитывая, что имя приложения "MyApp", поэтому пользователь может легко удалить их все в списках, перечисленных в алфавитном порядке. Альтернативно, если вы можете жить с более сложными приложениями-заглушками, используйте ACTION_PACKAGE_REMOVED как указано здесь.