With FLAG_GRANT_READ_URI_PERMISSION
in intent that passed to startActivity
, we can grant Uri
permission if the uri is set using setData
. But if the Uri
in put in EXTRA_STREAM
, the Uri
is not granted before jeallybean.
I know we can use grantUriPermission
followed by a revokeUriPermission
to cancel back the permission granted. But it seems that there is no good place to run revokeUriPermission
.
Is there any better solution? Or any suggestion to put revokeUriPermission
? Thanks in advance.
Related link: How to grant temporary access to custom content provider using FLAG_GRANT_READ_URI_PERMISSION
I did some reading about it. First, EXTRA_STREAM does not use FLAG_GRANT_READ_URI_PERMISSION
. It works starting from JellyBean only because under the hood, calling startActivity()
copies EXTRA_STREAM
to ClipData
, which is set for Intent and uses FLAG_GRANT_READ_URI_PERMISSION
.
Regarding your question where revokeUriPermission() should be called.
I suggest to use:
private static final int REQUEST_CODE = 1;
startActivityForResult(intent, REQUEST_CODE);
instead of
startActivity(intent);
and then override the following method:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check which request we're responding to
if (requestCode == REQUEST_CODE) {
// Call revokeUriPermission here
}
}
Above method will be called when started activity exits. Have a look at documentation here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With