2010-03-31 65 views
0

嗨我從相機插入圖像(拍照)到MediaStore.Images.Media數據存儲。顯示最後圖片

有誰知道我可以怎樣去顯示最後拍攝的照片?

我用過Uri image = ContentUris.withAppendedId(externalContentUri,45);顯示來自數據存儲的圖像,但顯然45不是正確的圖像。

我嘗試將以前活動(相機)中的信息傳遞給顯示活動,但我假設由於照片回調是其自己的線程,該值永遠不會被設置。照片代碼如下

Camera.PictureCallback photoCallback =新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

肯定最後拍攝的圖像,你仍然會有用於保存數據的文件流嗎? – thecoshman 2010-03-31 09:40:08

+0

fileURL指向文件 - 但是,此方法在其自己的線程中調用camera.takePicture(shutterBack,null,photoCallback); 所以fileURL似乎永遠不會返回一個值(總是空)我已經把主線程休眠並在while循環中保存它,希望它有一個值 - 但它似乎永遠不會發生在主線程中。 – Steve 2010-03-31 10:21:02

回答

1

你可以使用這樣的事情來獲得

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