Могу ли я попросить систему перезагрузить разрешения моего приложения? - PullRequest
0 голосов
/ 21 ноября 2018

Есть ли способ программно попросить Android перезагрузить / повторно установить разрешения для моего приложения без переустановки приложения или перезагрузки устройства на некорневом устройстве?

Зачем мне это нужно?

Мое приложение (ClientApp) связывается со службой, объявленной в AIDL другим приложением (ServiceApp).ServiceApp - это стороннее приложение, которое я не могу изменить, и оно объявляет разрешение, которое требуется ClientApp для привязки к его службе, поэтому я добавил это разрешение в манифест моего ClientApp:

<uses-permission android:name="com.example.service.API" />

Когда я устанавливаю ServiceAppдо установки ClientApp все отлично работает.Однако, когда я сначала устанавливаю ClientApp, а затем устанавливаю ServiceApp, я получаю исключение при вызове bindService для службы ServiceApp в ClientApp:

java.lang.SecurityException: Not allowed to bind to service Intent { act=com.example.service.API pkg=com.example.service }

Насколько я понимаю, мое приложение не получает запрошенное разрешение на установку, поскольку оно незаявлено в системе до установки ServiceApp.Я могу исправить это на Android <5.0, объявив разрешение ServiceApp в манифесте ClientApp, но это невозможно в Android 5.0+ из-за соображений безопасности. </p>

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

1 Ответ

0 голосов
/ 21 ноября 2018

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

Пример разрешения камеры:

if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED)
{
    // permission granted
}
else
{
    // ask permission to user
    ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.CAMERA}, Constants.PermissionRequestCodes.CAMERA_REQUEST);
}
...