Предоставить разрешение uri на uri в EXTRA_STREAM с намерением

С FLAG_GRANT_READ_URI_PERMISSION в намерении, который передан в startActivity, мы можем предоставить разрешение Uri, если uri установлен с помощью setData. Но если Uri вставить в EXTRA_STREAM, Uri не предоставляется до jeallybean.

Я знаю, что мы можем использовать grantUriPermission, а затем revokeUriPermission, чтобы отменить предоставленное разрешение. Но кажется, что нет хорошего места для запуска revokeUriPermission.

Есть ли лучшее решение? Или любое предложение поставить revokeUriPermission? Спасибо заранее.

Ссылки по теме: Предоставление временного доступа к производителю пользовательского контента с помощью FLAG_GRANT_READ_URI_PERMISSION

Ответ 1

Я читал об этом немного. Во-первых, EXTRA_STREAM не использует FLAG_GRANT_READ_URI_PERMISSION. Он работает, начиная с JellyBean только потому, что под капотом, называя startActivity() копии EXTRA_STREAM до ClipData, который установлен для Intent и использует FLAG_GRANT_READ_URI_PERMISSION.

Относительно вашего вопроса, на который должен вызываться revokeUriPermission().

Я предлагаю использовать:

private static final int REQUEST_CODE = 1;
startActivityForResult(intent, REQUEST_CODE);

вместо

startActivity(intent);

а затем переопределить следующий метод:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Check which request we're responding to
    if (requestCode == REQUEST_CODE) {
        // Call revokeUriPermission here

    }
}

Вышеуказанный метод будет вызываться при запуске активности. Посмотрите документацию здесь