Android M Permissions: onRequestPermissionsResult() not being called
Solution 1:
I ran into the same issue and I just found the solution. When using the Support library, you have to use the correct method calls. For example:
- When in AppCompatActivity, you should use ActivityCompat.requestPermissions;
- When in android.support.v4.app.Fragment, you should use simply requestPermissions (this is an instance method of android.support.v4.app.Fragment)
If you call ActivityCompat.requestPermissions in a fragment, the onRequestPermissionsResult callback is called on the activity and not the fragment.
Solution 2:
You can try this:
requestPermissions(permissions, PERMISSIONS_CODE);
If you are calling this code from a fragment it has it's own requestPermissions method. I believe the problem is that you are calling static method.
Pro Tip if you want the onRequestPermissionsResult()
in a fragment:
FragmentCompat.requestPermissions(Fragment fragment, String[] permissions, int requestCode)
Solution 3:
I hope it works fine
For Activity :
ActivityCompat.requestPermissions(this,permissionsList,REQUEST_CODE);
For Fragment :
requestPermissions(permissionsList,REQUEST_CODE);
Solution 4:
I encountered this problem too. If you want the activity that handles permissions not in the history/recents, then you will be tempted to change your AndroidManifest.xml
entry.
If you set the activity that you call requestPermissions
or AppCompatActivity.requestPermissions
with
android:noHistory="true"
android:excludeFromRecents="true"
in your AndroidManifest.xml
then onRequestPermissionsResult()
will not be called. This is true if your Activity is derived from Activity
or AppCompatActivity
.
This can be fixed by removing both flags from 'AndroidManifest.xml' and finishing your activity with finishAndRemoveTask()
instead.
Solution 5:
If you have onRequestPermissionsResult
in both activity and fragment, make sure to call super.onRequestPermissionsResult
in activity. It is not required in fragment, but it is in activity.