Возможно ли иметь «необязательные» разрешения в Android? - PullRequest
18 голосов
/ 19 апреля 2011

Есть ли способ для приложения Android объявить запрошенные разрешения как необязательные?

т.е. Я хочу написать приложение, которое запрашивает набор разрешений, например, один из них - доступ к контактам пользователя. Теперь приложение может работать и делать полезные вещи без разрешения на доступ, но оно может делать больше, если оно предоставлено.

Есть ли способ и приложение сказать "Я хочу разрешение X, но вы можете отказаться от него, и в этом случае я буду счастлив работать с ограниченной функциональностью?"

Ответы [ 3 ]

9 голосов
/ 19 апреля 2011

Я не верю, так как разрешения устанавливаются в манифесте и принимаются пользователем при установке .apk.Вы можете создать облегченную версию приложения с ограниченными разрешениями и ограниченным набором функций и предложить ее в качестве альтернативы.

5 голосов
/ 04 августа 2013

Можно предоставить привилегии уже установленному приложению, не запрашивая разрешения в «основном» приложении и создав другое приложение («заглушку»), используя тот же android:sharedUserId, который запрашивает функции.Затем вы можете проверить, установлено ли приложение-заглушка разрешения, проверив, оценивает ли

context.checkCallingOrSelfPermission(permission) == PackageManager.PERMISSION_GRANTED

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

При проектировании своего приложения вы можете легко повторно ввести дополнительные разрешения в основной apk без необходимости изменения какого-либо кода, например, если выраспространяйте несколько версий.

Теперь вы можете запросить привилегии у пользователя, запустив установку (одну из) ваших приложений-заглушек.Поэтому, если ваши привилегии требуются после некоторого пользовательского ввода в активности, запустите apk, чтобы выскочить, если привилегия не была предоставлена ​​(конечно, вы можете поместить объяснительную операцию перед ней), и выполнить функцию, когда вернетесь изменеджер пакетов или когда разрешение было предоставлено ранее.Вы также можете включить или отключить разрешения где-нибудь в своих настройках или в диалоговом окне первого запуска.

Для ленивых (как и я) краткое резюме о том, как вызвать установщик пакета: Создайте Intent используя Intent.ACTION_VIEW для file:// -URI, используя тип "application/vnd.android.package-archive".Ресурсы и ресурсы не работают напрямую, например, вы можете связать их в качестве ресурса и скопировать в папку кэша или аналогичную.


Предупреждение: Этот ответ может не соответствоватьGoogle Play ToS, так как этот метод имеет некоторые проблемы с удалением (может привести к утечке приложений, см. Ниже), особенно при удалении через сторонние механизмы (например, Google Play, так как пользователь не видит вспомогательные приложения, использующие эти методы), а дополнительные привилегии не могутотображаться в магазине воспроизведения afaik.

При возникновении проблем с удалением я бы рекомендовал использовать такие имена, как «MyApp: разрешения XXX», учитывая, что имя приложения - «MyApp», поэтому пользователь может легко удалить их всев алфавитном порядке списки.В качестве альтернативы, если вы можете жить с более сложными приложениями-заглушками, используйте ACTION_PACKAGE_REMOVED , как указано здесь .

5 голосов
/ 17 октября 2012

На данный момент не поддерживается и не разрабатывается. Звезда выпуск 6266 на трекере ошибок Android, если вы хотите, чтобы он был реализован.

Ссылка: http://code.google.com/p/android/issues/detail?id=6266

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...