0

私のアプリは、カスタム ギャラリーに画像の完全なリストを表示します。このために、画像サムネイルの ContentProvider を使用しています。サムネイルを選択したら、実際の画像を表示する必要があります。私の理解によると、ギャラリーの画像は、サムとメディア テーブルで同じ一意の ID を持っています。

これがコードです。まず、Thumbnail の ContentProvider にクエリを実行し、URL と ID を保存しました。

String pictureThumbTemp[] = { MediaStore.Images.Thumbnails._ID, MediaStore.Images.Thumbnails.DATA };

Cursor imagecursor = context.getContentResolver().query  (MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, 
                              pictureThumbTemp,null, null, null);

後で、グリッドに親指を表示しています。サムネイルを選択すると、元の画像を表示する必要があります。次のような元の画像を取得しようとしています

String pictureImageTemp[] = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
Cursor imagecursor = context.getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                    pictureImageTemp, MediaStore.Images.Media._ID + " = " + mediaID + "", null,
                    MediaStore.Images.Media._ID);

全体として、サムネイルを URL で表示しています。クリックすると、元の画像テーブルでサムネイルのメディア ID を照会しています。

しかし、結果が0のカーソルを返しています。

私を助けてください。

ありがとう、
シャ。

4

2 に答える 2

3

うまくいく方法を見つけました。

元の画像のカーソルを取得しました。そこから、すべての画像の ID を取得し、パスを含むカーソルを返す ID のサムネイルをクエリしました。

以下のコード スニペットを見つけます。

String pictureCols[] = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
Cursor imagecursor = mContext.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, pictureCols,
            null, null, null);
imagecursor.moveToFirst();
mImageUrls = new ArrayList<String>();
try {
    // Iterate the cursor for Image urls
    for (int index = 0; index < imagecursor.getCount(); index++) {

      imagecursor.moveToPosition(index);
      preparePicture(imagecursor);
    }
  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    imagecursor.close();
  }
}

preparePictureメソッドのコードは次のとおりです

private void preparePicture(Cursor imageCursor) {

      //  get the ID for the original image
  int idColumnIndex = imageCursor.getColumnIndex(mSelectedImage.mediaID);
  Long id = imageCursor.getLong(idColumnIndex);

  // Thumbnail image Cursor for this specific image.
  String thumbCols[] = { MediaStore.Images.Thumbnails._ID, MediaStore.Images.Thumbnails.DATA };
  Cursor thumbCursor = MediaStore.Images.Thumbnails.queryMiniThumbnail(mContext.getContentResolver(), id,
        Thumbnails.MINI_KIND, thumbCols);
    thumbCursor.moveToFirst();

  // Save thumbnail URL in MediaInfo
  dataColumnIndex = thumbCursor.getColumnIndex(mSelectedThumb.data);
  String thumbURL = thumbCursor.getString(dataColumnIndex);

  thumbCursor.close();
  mImageUrls.add(url);

}

最後に、すべてのサムネイル URL を ArrayList に格納します。

ビデオのサムネイルでは、同じロジックが機能しません。もちろん、それは別の質問です:)

よろしく、
シャ。

于 2013-05-24T06:38:04.010 に答える
1

これを試してください

final String[] pictureImageTemp= { MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID };

        Cursor imagecursor = managedQuery(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI, pictureImageTemp, null,
                null, MediaStore.Images.Media._ID);
于 2013-05-16T06:51:55.140 に答える