Метод shouldShowRequestPermissionRationale
возвращает значение true, если требуется объяснить пользователю, почему требуется разрешение.При первом запросе разрешения этот метод возвращает false .
Но если пользователь отклоняет разрешение один раз, когда разрешение запрашивается в другой раз, этот метод возвращает true потому что может быть хорошей идеей объяснить пользователю, почему это разрешение требуется для приложения.
Когда разрешение уже предоставлено, этот метод вернет false .
Поэтому хорошей практикой будет сначала проверить, что возвращает этот метод, и, если требуется объяснить пользователю, объяснить это с помощью диалогового окна или чего-то еще, затем запросить разрешение, в противном случае запросите разрешение напрямую.
Вы также можете взглянуть на мою библиотеку , которая упрощает весь этот процесс и другие процессы, касающиеся разрешений во время выполнения.