私はデバイスギャラリーからイメージを取得し、別のアクティビティに表示しようとしています。私の活動の コード:他の活動にUriの許可を与えてください
private void startGallery() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(intent, REQ_OPEN_GALLERY)
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQ_OPEN_GALLERY && resultCode == Activity.RESULT_OK) {
Uri imageUri = data.getData()
// here I save image uri to pass to another activity
}
}
私はSecurityException
を取得する別のアクティビティにURIを開こう。 Docsは、受信したURIに対する許可が、それを受信するアクティビティが終了するまで続きます。だから、私の活動が終わったら、私はファイルを読む許可がありません。
このuriによって他のアクティビティがファイルを開くことを許可するために、uriのアクセス許可を延長する方法はありますか?または、唯一の方法は、ローカルのアプリストレージに画像をコピーすることですか?
UPD:私の目標は、受信したuriをローカルデータベースに保存し、他のアクティビティとサービスがこのファイルを読み取れるようにすることです。
申し訳ありません。私の質問は十分明確ではありません。私の目標は、受け取ったuriをローカルdbに保存し、他の活動やサービスがこのファイルを読むことを許可することです。更新された回答 – nnesterov
@nnesterov: "私の目標は受け取ったURIをローカルDBに保存しています" - うまくいかない。 Android 4.4以降で 'ACTION_OPEN_DOCUMENT'を使用している場合は、' takePersistableUriPermission() 'を使うことができます。それが有効ならば、' Uri'で指定されたコンテンツに長期間アクセスすることができます。それ以外の場合は、コンテンツのローカルコピーを作成する必要があります。これを行う方法のデモンストレーションについては、[このサンプルアプリケーション](https://github.com/commonsguy/cw-omnibus/tree/master/Documents/Durable)を参照してください。 – CommonsWare