2010-03-31 10 views
0

Bonjour J'insère une image de l'appareil photo (prise de vue) dans le magasin de données MediaStore.Images.Media.Afficher la dernière image

Est-ce que quelqu'un sait comment je peux afficher la dernière photo prise?

J'ai utilisé Uri image = ContentUris.withAppendedId (externalContentUri, 45); pour afficher une image à partir du magasin de données, mais évidemment 45 n'est pas l'image correcte.

J'essaie de transmettre les informations de l'activité précédente (Caméra) à l'activité d'affichage, mais je suppose que le rappel photo étant son propre thread, la valeur ne sera jamais définie. Code photo est la suivante

Camera.PictureCallback photoCallback = new Camera.PictureCallback() {

public void onPictureTaken(byte[] data, Camera camera) { 
     // TODO Auto-generated method stub 
     FileOutputStream fos; 
     try 
     { 
      Bitmap bm = BitmapFactory.decodeByteArray(data, 0, data.length); 
      fileUrl = MediaStore.Images.Media.insertImage(getContentResolver(), bm, "LastTaken", "Picture"); 

      if(fileUrl == null) 
      { 
       Log.d("Still", "Image Insert Failed"); 
       return; 
      } else 
      { 

       picUri = Uri.parse(fileUrl); 
       sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, picUri)); 
      } 
     } 
     catch(Exception e) 
     { 
      Log.d("Picture", "Error Picture: ", e); 
     } 
     camera.startPreview(); 

    } 
}; 
+0

sûrement vous encore avoir le flux de fichier que vous avez utilisé pour enregistrer les données? – thecoshman

+0

Le fichier URL pointe sur le fichier - cependant cette méthode est appelée dans son propre thread camera.takePicture (shutterBack, null, photoCallback); Donc, fileURL ne semble jamais renvoyer une valeur (Toujours nulle) J'ai mis le thread principal en veille et l'ai tenu dans une boucle while dans l'espoir qu'il a une valeur - mais cela ne semble jamais arriver pour le thread principal. – Steve

Répondre

1

Vous pouvez utiliser quelque chose comme ceci pour obtenir la dernière image prise

final ContentResolver cr = getContentResolver(); 
    final String[] p1 = new String[] { 
      MediaStore.Images.ImageColumns._ID, 
      MediaStore.Images.ImageColumns.DATE_TAKEN 
    }; 
    Cursor c1 = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, p1, null, null, 
      p1[1] + " DESC"); 

    if (c1.moveToFirst()) { 
     Log.d(TAG, "last picture (" + c1.getInt(0) + ") taken on: " + 
          new Date(c1.getLong(1)); 
    } 

    c1.close();