2

あるアプリから別のアプリへIntentの助けを借りて、複数の URI を提供しようとしています。FileProvider

次のようなURIを1つだけ送信すると、機能しました。

resultIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
resultIntent.setDataAndType(contentUri,getContentResolver().getType(contentUri));

setResult(RESULT_OK, resultIntent);

私の「受信」アプリでは、次のように続けることができますonActivityResult

Uri returnUri = data.getData();
ParcelFileDescriptor mInputPFD = getContext().getContentResolver().openFileDescriptor(returnUri, "r");

ArrayList今、私は URI の送信を試みました:

resultIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uriList);
resultIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
setResult(RESULT_OK, resultIntent);

しかし、付与されたアクセス許可フラグは で設定された URI にのみ適用されるためsetData()、受信アプリで ArrayList から URI にアクセスできません。解決策としてClipDataについて読みましたが、残念ながらMin SDK 15を使用せざるを得ません。

私の質問は、次のようなものを使用して、受信アプリで手動でアクセス許可を設定することをお勧めしますか?

context.grantUriPermission("com.example.provider", returnUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);

「ArrayList」オプションを選択し、後でそれを取り消すと取得するすべてのURIについて?私はこれを行うことができますか?他のすべてのアプリも同様に、プロバイダー アプリのプライベート ファイルにアクセスできませんでしたか?

ここでどのパッケージを指定する必要がありますか? プロバイダー アプリまたはレシーバー アプリ パッケージ。

ヘルプやヒントをいただければ幸いです

4

1 に答える 1

4

解決しました。

私の問題は、プロバイダーアプリではなくgrantUriPermission()レシーバーアプリで呼び出したことです。したがって、次を呼び出すと、アクセス許可の例外が修正されました。

getApplicationContext().grantUriPermission(getCallingPackage(), fileUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
于 2016-06-02T10:12:29.277 に答える