Можно предоставить привилегии уже установленному приложению, не запрашивая разрешения в «основном» приложении и создав другое приложение («заглушку»), используя тот же 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 , как указано здесь .