Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
Ask Question
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
grantResults
is not
emplty for my case,but i have seen crash report on fabric console for
grantResults
there is many crash with
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);
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.
Note: It is possible that the permissions request interaction with the user is interrupted. In this case you will receive empty permissions and results arrays which should be treated as a cancellation.
How you want to deal with cancellation is totally up to you (re-ask for permission, treat it as a denial, etc), so just make sure to account for that case in your code.
–
–
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.