2010-03-31 3 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

+0

ФайлURL указывает на файл - однако этот метод вызывается в его собственном потоке camera.takePicture (shutterBack, null, photoCallback); Таким образом, fileURL никогда не возвращает значение (всегда null). Я поставил основной поток в режим сна и удерживал его в цикле while в надежде, что он имеет значение, но, похоже, это не происходит для основного потока. – Steve

ответ

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(); 
Смежные вопросы