2012-04-10 2 views
3

私は自分のサーバーに画像をアップロードするために書いたアプリケーションを持っています。これはdroidxを実行しているアンドロイド2.3.4と、アンドロイド4.0.3を実行する2つの異なるシミュレータでうまくいきました。しかし、Asus ee Pad Transformer(4.0.3を実行中)で実行しようとすると、MediaStore.Images.Thumbnailsに0個の項目があることが常にわかります。MediaStore.Images.Thumbnailsが空であるようです

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枚、カメラから5枚、インターネットからダウンロードした枚数が表示されます。サムネイルではなく画像を取得する以前のコードでは、カメラからの画像が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"); 

これらの画像は、ギャラリーアプリケーションを開いたときにすべて表示されます。私はまた、メディアストレージアプリをクリアし、それが役に立たないかどうかを確認するためにデバイスをリブートしてみましたが、そうではありませんでした。この時点で、私は非常に混乱しています。特に、電話とシミュレータでこのコードが同じであったためです。

+0

Nexus Sと同じですが、解決方法はありますか? – shem

+0

@shem私は答えとして使用してコードを投稿しました – nick

答えて

4

OK、見つけました。
あなたは画像IDを持っている場合、あなたはそれが使用してサムネイルですゲット:

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

これはは、完全な画像をロードせずにビットマップを返します。

+0

ビットマップが生成されるまで、この呼び出しはブロックされます。 – tbm

+0

また、世代が失敗した場合、返されたビットマップは説明なしでnullになります。 – tbm

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); 
    } 
} 
+0

それは仕事ですが、正しいサムネイルが得られていて元の写真から作成していないことは確かですか?非常に遅く、大量のメモリを使用しているように見えます。 – shem

+0

@shemドキュメントが正しく理解されていれば、すべてのイメージ/ビデオ用の新しいサムネイルが作成されています。私はこのコードを1年ほど前に書きました。確かに覚えておくのは難しいです。ここでは、ドキュメントへのリンクhttp://developer.android.com/reference/android/media/ThumbnailUtils.html – nick

+0

はい、私は実際の画像を読み込むdecodeFileだと思います。 – shem

関連する問題