Какой подход вы используете для запроса разрешения во время выполнения в библиотеке? - PullRequest
0 голосов
/ 05 октября 2018

Я работаю в библиотеке, и мне интересно, как другие люди справляются с этим.Вы просто добавляете аннотацию к методам ( @ Требуется разрешение )?Или вы обрабатываете процесс запроса необходимого разрешения от имени потребителя?

Заранее спасибо!

1 Ответ

0 голосов
/ 05 октября 2018

Проверка разрешения

if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_CALENDAR)
        != PackageManager.PERMISSION_GRANTED) {
    // Permission is not granted
}

Если приложение имеет разрешение, метод возвращает PERMISSION_GRANTED, и приложение может продолжить операцию.Если приложение не имеет разрешения, метод возвращает PERMISSION_DENIED, и приложение должно явно запросить у пользователя разрешение.

Запрос разрешений

Когда ваше приложение получаетPERMISSION_DENIED из checkSelfPermission (), вам нужно запросить у пользователя это разрешение.Android предоставляет несколько методов, которые вы можете использовать для запроса разрешения, например requestPermissions (), как показано в фрагменте кода ниже.Вызов этих методов вызывает стандартное диалоговое окно Android, которое вы не можете настроить.

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

Один из подходов, который вы можете использовать, - предоставить объяснение, только если пользователь уже отклонил этот запрос на разрешение.Android предоставляет служебный метод shouldShowRequestPermissionRationale(), который возвращает значение true, если пользователь ранее отклонил запрос, и возвращает значение false, если пользователь отказал в разрешении и выбрал параметр «Больше не спрашивать» в диалоговом окне запроса разрешения, или еслиПолитика устройства запрещает разрешение.

Запрос необходимых разрешений

// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
        Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {

    // Permission is not granted
    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.READ_CONTACTS)) {
        // Show an explanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.
    } else {
        // No explanation needed; request the permission
        ActivityCompat.requestPermissions(thisActivity,
                new String[]{Manifest.permission.READ_CONTACTS},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS);

        // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
        // app-defined int constant. The callback method gets the
        // result of the request.
    }
} else {
    // Permission has already been granted
}

Обработка ответа на запрос разрешения

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // permission was granted, yay! Do the
                // contacts-related task you need to do.
            } else {
                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request.
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...