Диалог разрешений Android не отображается при попытке получить разрешения READ_PHONE_STATE - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь использовать разрешения READ_PHONE_STATE, и поэтому (они считаются опасными разрешениями) я должен проверить, предоставлены ли они, а затем запросить разрешение, если не предоставлено. Моя проверка (ContextCompat.checkSelfPermission) возвращает false, поэтому я запускаю ActivityCompat.requestPermissions. Диалоговое окно, которое должно отображаться, не отображается.

Я нацеливаюсь на API 28, поэтому я попытался добавить разрешения READ_CALL_LOG, которые также считаются опасными, но они также не предоставляются.

            var selfPermission = ContextCompat.checkSelfPermission(this,
                android.Manifest.permission.READ_CALL_LOG)

            if (selfPermission != PackageManager.PERMISSION_GRANTED)
            {
                val perms = arrayOf(android.Manifest.permission.READ_CALL_LOG)

                ActivityCompat.requestPermissions(this, perms,
                    Constants.PERMISSION_READ_CALL_LOG_REQUEST)
                selfPermission = ContextCompat.checkSelfPermission(this,
                    android.Manifest.permission.READ_CALL_LOG)
            }

            if (selfPermission != PackageManager.PERMISSION_GRANTED)
            {
                return
            }

            selfPermission = ContextCompat.checkSelfPermission(this,
                android.Manifest.permission.READ_PHONE_STATE)

            if (selfPermission != PackageManager.PERMISSION_GRANTED)
            {
                val perms = arrayOf(android.Manifest.permission.READ_PHONE_STATE)

                ActivityCompat.requestPermissions(this, perms,
                    Constants.PERMISSION_READ_PHONE_REQUEST)
                selfPermission = ContextCompat.checkSelfPermission(this,
                    android.Manifest.permission.READ_PHONE_STATE)
            }

            if (selfPermission != PackageManager.PERMISSION_GRANTED)
            {
                return
            }

1 Ответ

0 голосов
/ 08 ноября 2019

Я также столкнулся с этой проблемой, и в моем случае это было связано с тем, что я выполнял мой вызов requestPermission, который не был потоком пользовательского интерфейса (исполнитель Java).

Таким образом, чтобы исправить это, вы должны просто убедиться, что вы в главном потоке (версия Java):

Handler mainHandler = new Handler(Looper.getMainLooper());
mainHandler.post(new Runnable() {
    @Override
    public void run() {
        ActivityCompat.requestPermissions(context, perms,
                Constants.PERMISSION_READ_CALL_LOG_REQUEST);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...