I am asking for permission inside onActivityResult
of my activity and what is happening is that my activity is being paused while request permission dialog is disp
what is happening is that my activity is being paused while request permission dialog is displayed. Why is that?
requestPermissions docs says
This method may start an activity allowing the user to choose which
permissions to grant and which to reject. Hence, you should be
prepared that your activity may be paused and resumed
. Further, granting some permissions may require a restart of you application. In such a case, the system will recreate the activity stack before delivering the result to your onRequestPermissionsResult(int, String[], int[]).
Although an another solution is move your code in onStop
if possible and suitable
There is also possibility that, your Activity (say, MainActivity) that invoking the
requestPermissions()
might have been declared flag
android:noHistory="true"
in the Manifest.
Therefore the MainActivity is paused, and eventually finish()
'd during requestPermissions()
.
From Android documentation requestPermissions
You cannot request a permission if your activity sets noHistory to true in the manifest
If that is the case..
you may do a finish()
clear specific activity programmatically inside the MainActivity { .. }
to remove it from the activities stack, not in the Manifest.
This was in my case !
Source code of method Activity#requestPermissions:
public final void requestPermissions(@NonNull String[] permissions, int requestCode) {
if (requestCode < 0) {
throw new IllegalArgumentException("requestCode should be >= 0");
}
if (mHasCurrentPermissionsRequest) {
Log.w(TAG, "Can reqeust only one set of permissions at a time");
// Dispatch the callback with empty arrays which means a cancellation.
onRequestPermissionsResult(requestCode, new String[0], new int[0]);
return;
}
Intent intent = getPackageManager().buildRequestPermissionsIntent(permissions);
startActivityForResult(REQUEST_PERMISSIONS_WHO_PREFIX, intent, requestCode, null);
mHasCurrentPermissionsRequest = true;
}
We can clearly see that a new activity is opened. Hence onPause
in the calling activity will be surely called. So this is the expected behavior.
If you want to prevent pausing your activity, make sure you already have the required permissions before opening that activity.
If your activity is main activity, add an splash activity. Otherwise check for permissions before opening your activity.