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]
выдает исключение.