2012-04-10 6 views
3

Ich habe eine App, die ich geschrieben habe, um Bilder auf meinen Server hochzuladen, die auf einem droidx läuft Android 2.3.4 und zwei verschiedene Simulatoren Android 4.0.3 funktioniert großartig. Wenn ich jedoch versuche, es auf einem Asus ee Pad Transformer (mit 4.0.3) auszuführen, sagt es mir immer, dass es 0 Elemente in MediaStore.Images.Thumbnails gibt.MediaStore.Images.Thumbnails scheint leer zu sein

Es sollte 6 angezeigt werden, 5 von der Kamera und 1, die ich aus dem Internet heruntergeladen habe. Früherer Code, der nur Bilder statt Miniaturbilder erhält, sagt mir, dass es 5 Bilder von der Kamera gibt, also weiß ich, dass der Code funktioniert.

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"); 

Diese Bilder werden alle angezeigt, wenn ich die Galerie-App öffne. Ich habe auch versucht, die Media Storage App zu löschen und das Gerät neu zu starten, um zu sehen, ob das helfen würde, aber das tat es nicht. An dieser Stelle bin ich sehr verwirrt, zumal dieser exakt gleiche Code auf dem Handy und Simulatoren funktioniert hat.

+0

gleich hier mit meinem Nexus S, haben Sie eine Ahnung, wie Sie es lösen? – shem

+0

@shem Ich habe den Code geschrieben, den ich als Antwort aufgespielt habe – nick

Antwort

4

OK, gefunden.
Wenn Sie das Bild-ID haben bekommen Sie es Thumbnail erhalten mit:

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

dies wird die Bitmap ohne Laden der Vollbild zurückzukehren.

+0

Bear in Beachten Sie, dass dieser Aufruf blockiert, wenn die Bitmap nicht verfügbar ist, bis sie generiert wird. – tbm

+0

Wenn die Generierung fehlschlägt, ist das zurückgegebene Bitmap ohne Erklärung null. – tbm

0

Ich habe eine Dienstprogramme-Klasse erstellt, die Miniaturansichten für Bilder und Videos erstellt und zurückgibt, wenn Sie die URI für das Bild/Video, das Sie erhalten möchten, übergeben.

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

Es ist Arbeit, aber bist du sicher, dass es das richtige Thumbnail bekommt und nicht eines vom Originalfoto erstellt? weil es sehr langsam und mit viel Speicher aussieht. – shem

+0

@shem Wenn ich die Dokumentation richtig verstehe, wird für jedes Bild/Video eine neue Miniatur erstellt. Ich habe diesen Code vor fast einem Jahr geschrieben, daher ist es schwierig, sich sicher zu erinnern. Hier ist ein Link zur Dokumentation http://developer.android.com/reference/android/media/ThumbnailUtils.html – nick

+0

ja, aber ich denke, die decodeFile lädt das reale Bild – shem