3

サーバーに画像をアップロードするために作成したアプリがあります。これは、Android 2.3.4 を実行している droidx と Android 4.0.3 を実行している 2 つの異なるシミュレーターでうまく機能しました。ただし、Asus ee Pad Transformer (4.0.3 を実行) で実行しようとすると、MediaStore.Images.Thumbnails に 0 アイテムがあると常に通知されます。

String[] projection = {MediaStore.Images.Thumbnails._ID};
cursor = managedQuery( MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,
    projection,
    null,
    null,
    MediaStore.Images.Thumbnails.IMAGE_ID);
Log.d("Info","There are " + cursor.getCount() + " items");

カメラから 5 つ、インターネットからダウンロードした 1 つ、合計 6 つが表示されるはずです。サムネイルではなく画像を取得するだけの以前のコードは、カメラから 5 つの画像があることを示しているため、コードが機能していることがわかります。

String[] projection = {MediaStore.Images.Media._ID};
    cursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
    projection,
    "Camera",
    null,null);
Log.d("Info","There are " + cursor.getCount() + " images");

ギャラリー アプリを開くと、これらの画像がすべて表示されます。また、Media Storage アプリをクリアしてデバイスを再起動して、それが役立つかどうかを確認してみましたが、そうではありませんでした。この時点で、特にこのまったく同じコードが電話とシミュレーターで機能したため、私は非常に混乱しています。

4

2 に答える 2

4

わかりました、見つかりました。
画像IDを取得したら、次を使用してサムネイルを取得します。

MediaStore.Images.Thumbnails.getThumbnail(getContentResolver(), imageID, MediaStore.Images.Thumbnails.MINI_KIND, null);

これにより、画像全体をロードせずにビットマップが返されます。

于 2013-03-12T15:39:49.140 に答える
0

取得したい画像/ビデオのURIを渡すと、画像とビデオのサムネイルを作成して返すユーティリティクラスを作成しました。

package Utilities;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.ThumbnailUtils;
import android.provider.MediaStore;

public class AndroidUtils 
{
    public static final int THUMBNAIL_SIZE = 128;
    public static Bitmap GetImagePreview(String uri)
    {
        return ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(uri), THUMBNAIL_SIZE, THUMBNAIL_SIZE);
    }

    public static Bitmap GetVideoPreview(String uri)
    {
        return ThumbnailUtils.createVideoThumbnail(uri, MediaStore.Images.Thumbnails.MICRO_KIND);
    }
}
于 2013-02-18T19:25:54.583 に答える