3

Imagesテーブルを照会してMediaStore.Images.Media.EXTERNAL_CONTENT_URIディレクトリ内のすべての画像を取得しています。私は結果のそれぞれに示すURIを持っているしたいのですが、今ContentResolver.query()からURIを取得

String[] what = new String[]{ MediaStore.Images.ImageColumns.DATE_TAKEN, 
      MediaStore.Images.ImageColumns._ID, 
      MediaStore.Images.ImageColumns.MIME_TYPE, 
      MediaStore.Images.ImageColumns.DATA }; 

String where = MediaStore.Images.Media.MIME_TYPE + "='image/jpeg'" + 
      " OR " + MediaStore.Images.Media.MIME_TYPE + "='image/png’"; 

Cursor cursor = getContext().getContentResolver() 
        .query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
          what, 
          where, 
          null, 
          MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC”); 

は、次のクエリを参照してください。 これは私が今やっているものです:

int dataIndex = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
String path = cursor.getString(dataIndex); 
final Uri uri = Uri.fromFile(new File(path)); 

例えば、私はDATA列からのパスを取る、ファイルを作成し、Uri.fromFileを使用しています。私には2つの質問があります。

  1. これは動作することは保証されていますか?上記のクエリは、データ列のパスを返すように保証されていますか?それは私の電話のすべての写真のために働きます:は常に/storage/0/whatever.jpgのようなパスであり、uri.toString()はファイルスキームと同じです。それでも、画像はcontent:// urisによって非常によく定義できますが、画像テーブルにどのように表現されているか(そして、もしあれば)はわかりません。

  2. もしそうでない場合は、DATAの列で何を期待したらよいですか?それからUriを取得する方法は?

答えて

6

データ列のパスを返すことが保証上記のクエリですか?

何かを返す必要があります。その「何か」は使えないかもしれない。たとえば、イメージはリムーバブルストレージにある可能性があり、直接アクセスすることはできません。

Uriを取得するにはどうすればよいですか?

あなたはありません。 _IDからUriを作成してください。

Uri imageUri= 
    ContentUris 
    .withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
     cursor.getInt(cursor.getColumnIndex(MediaStore.Images.ImageColumns._ID))); 
+0

興味深いことに、ありがとうございます。 "使えないかもしれない部分"についてのただ一つのこと。私が理解しているように、あなたは私がこれらに対して新しいファイル(パス)を呼び出すことはできません。しかし、あなたが言ったように私がUriを構築すると、ContentResolver.open()を使ってアクセスできるようになりますか? – natario

+0

UriはContentUri sで安全に構築されたものです(リムーバブルストレージの画像などのエッジケースでも機能します)。または、どこかに小切手を追加する必要がありますか? – natario

+0

@mvai:READ_EXTERNAL_STORAGEを持っていればOKです。ただし、テストが推奨されます。私はまだ写真よりもビデオでもっと多くの作業をしてきましたが、そこに問題はないようです。最悪の場合の結果は、 'File'アプローチでのアクセスだけです。 – CommonsWare

関連する問題