В onRequestPermissionsResult grantResults на некоторых устройствах возвращают пустое значение, когда пользователь отклоняет разрешение - PullRequest
0 голосов
/ 09 июня 2018

In Shot: , In onRequestPermissionsResult grantResults на некоторых устройствах возвращают пустыми, а некоторые устройства имеют значение PackageManager.PERMISSION_DENIED, когда пользователь отклоняет разрешение.

Я предложил решение дляопределить, что пользователь выбрал принято , отклонить и запретить, не запрашивать снова для разрешения во время выполнения, на основе ответа https://stackoverflow.com/a/31925748/2941375.

согласно многим документам, которые я видел, если пользователь отклоняет разрешение, он возвращает grantResults пустой

код, который я использовал else if (grantResults[0] == PackageManager.PERMISSION_DENIED), поэтому в else if части он генерирует исключение Arrayindexoutofbound

Я тестировал код, когда пользователь отклонил разрешение grantResults для моего случая, но я видел отчет о сбое на матричной консоли для grantResults Существует много аварий с arrayindexoutofbound,

 @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case PermissionManager.MY_PERMISSIONS_REQUEST_LOCATION_ACCESS: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    DefineLocationService.start(this);
                    startNextActivity(0);
                } else if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
                    boolean showRationale = ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[0]);
                    if (!showRationale) {
                        // user also CHECKED "never ask again"
                        // you can either enable some fall back,
                        // disable features of your app
                        // or open another dialog explaining
                        // again the permission and directing to
                        // the app setting
                        startNextActivity(ARTIFICIAL_DELAY_MILLIS);
                    } else if (!PermissionManager.MY_REQUESTED_DIALOG) {
                        PermissionManager.checkLocationPermission(this);
                    } else {
                        startNextActivity(0);
                    }
                } else {
                    startNextActivity(ARTIFICIAL_DELAY_MILLIS);
                }


            }
        }
    }

кто-нибудь может объяснить это, почему некоторые устройства возвращают grantResults пусто, а некоторые возвращают grantResults имеют значение с уменьшением при разрешении пользователя на отклонение.

Я тестировал много раз, но grantResults никогда не опускалсяс моей стороны, но на консоли происходит сбой, это означает, что в некоторых случаях он пуст и grantResults[0] выдает исключение.

1 Ответ

0 голосов
/ 09 июня 2018

В соответствии с документацией :

Примечание. Возможно, что взаимодействие запроса пользователя с разрешениями прервано.В этом случае вы получите пустые разрешения и массивы результатов, которые следует рассматривать как отмену.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...