Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Grant uri permission to uri in EXTRA_STREAM in intent

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

like image 908
Bear Avatar asked Jul 19 '13 15:07

Bear


1 Answers

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

like image 179
Damian Petla Avatar answered Sep 18 '22 07:09

Damian Petla