In Shot:, In onRequestPermissionsResult grantResults on some device return empty and some device have a value PackageManager.PERMISSION_DENIED when user decline the permission.
I have implmeneted a solution for identify user has selected accepted ,deny and deny with don't ask again for run time permission,based on https://stackoverflow.com/a/31925748/2941375 answer.
as per many docs i have seen,if user decline permission then it returns grantResults empty
Code i have used else if (grantResults[0] == PackageManager.PERMISSION_DENIED) so in else if part it throw Arrayindexoutofbound exception
i have tested code when user decline permission
grantResultsis not emplty for my case,but i have seen crash report on fabric console forgrantResultsthere is many crash witharrayindexoutofbound,
@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);
}
}
}
}
can anyone have any explanation for this,why some device return grantResults empty and some device return grantResults have value with decline when user decline permission.
i have tested many time but grantResults never empty on my side,but there is crash on console,it means in some case it is empty and grantResults[0] throw the exception.