2014-02-21 78 views
0

我剛剛完成我的照片應用程序使用「相機」類相關的工具。 但是我在默認的Android相冊應用中看不到我的捕捉照片。 這裏是我的代碼段,從我的回調從Camera.takePicture:如何使用相機類捕獲到系統默認相冊

PictureCallback jpegPictureCallback = new PictureCallback() { 
    @Override 
    public void onPictureTaken(byte[] arg0, Camera arg1) { 

     Bitmap bmp = BitmapFactory.decodeByteArray(arg0, 0, arg0.length); 

     String fileName = Environment.getExternalStorageDirectory() 
       .toString() 
       + File.separator 
       + "DCIM" 
       + File.separator 
       + "Camera" 
       + File.separator 
       + "PicTest_" + System.currentTimeMillis() + ".jpg"; 
     File file = new File(fileName); 
     if (!file.getParentFile().exists()) { 
      file.getParentFile().mkdir(); 
     } 

     try { 
      BufferedOutputStream bos = new BufferedOutputStream(
        new FileOutputStream(file)); 
      bmp.compress(Bitmap.CompressFormat.JPEG, 80, bos); 
      bos.flush(); 
      bos.close(); 
      Toast.makeText(MainPage.this, "Picture work " + fileName + "!", 
        Toast.LENGTH_LONG).show(); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      // e.printStackTrace(); 
      Toast.makeText(MainPage.this, "Picture Failed" + e.toString(), 
        Toast.LENGTH_LONG).show(); 
     } 
    }; 
}; 

請爲此提供的任何想法,謝謝。

回答

1

使用MediaScannerConnection告訴MediaStore索引您的照片。請使用getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),而不是您正在使用的硬編碼子目錄。

而且也,而非byte[]解碼爲Bitmap,然後重新編碼它作爲一個byte[],你可以考慮只保存byte[]

另外還有,在主應用程序線程AFAIK上調用onPictureTaken();請執行您的圖像操作並在後臺線程中保存到磁盤。

+0

謝謝,它完全工作。我很長一段時間尋找這個答案。 –