2016-10-06 4 views
5

私はデバイスギャラリーからイメージを取得し、別のアクティビティに表示しようとしています。私の活動の コード:他の活動に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をローカルデータベースに保存し、他のアクティビティとサービスがこのファイルを読み取れるようにすることです。

答えて

9

このuriによって他のアクティビティがファイルを開くことを許可するために、いくつかの方法がありますか?

はい。第1の活動から第2の活動へのInclude FLAG_GRANT_READ_URI_PERMISSION when you pass the Uri

startActivity(new Intent(this, Something.class).setData(uri).addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)); 
+1

申し訳ありません。私の質問は十分明確ではありません。私の目標は、受け取ったuriをローカルdbに保存し、他の活動やサービスがこのファイルを読むことを許可することです。更新された回答 – nnesterov

+1

@nnesterov: "私の目標は受け取ったURIをローカルDBに保存しています" - うまくいかない。 Android 4.4以降で 'ACTION_OPEN_DOCUMENT'を使用している場合は、' takePersistableUriPermission() 'を使うことができます。それが有効ならば、' Uri'で指定されたコンテンツに長期間アクセスすることができます。それ以外の場合は、コンテンツのローカルコピーを作成する必要があります。これを行う方法のデモンストレーションについては、[このサンプルアプリケーション](https://github.com/commonsguy/cw-omnibus/tree/master/Documents/Durable)を参照してください。 – CommonsWare

関連する問題