2010-03-31 57 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();