2011-10-07 49 views
3

我試圖將圖像文件保存到外部存儲。我可以將圖片保存到SD卡,但不會顯示在Android圖庫應用程序中。我試過這種方法:用新創建的位圖更新Android圖像庫

File path = Environment.getExternalStorageDirectory(); 
      File f = new File(path + "/mydirectory/" + imageName + "_" +  System.currentTimeMillis() + ".jpg"); 
      FileOutputStream fos = new FileOutputStream(f); 
      f.mkdirs(); 
      b.compress(CompressFormat.JPEG, 100, fos); 
      fos.close(); 

      Uri contentUri = Uri.fromFile(f); 
      Intent mediaScanIntent = new Intent("android.intent.action.MEDIA_SCANNER_SCAN_FILE"); 
      mediaScanIntent.setData(contentUri); 
      getApplicationContext().sendBroadcast(mediaScanIntent); 

但它不顯示在畫廊。任何人都可以指出我正確的方向來解決這個問題嗎?

回答

11

使用此代碼保存圖像的位圖在Android設備畫廊

public void savePhoto(Bitmap bmp) 
{ 
imageFileFolder = new File(Environment.getExternalStorageDirectory(),"Rotate"); 
imageFileFolder.mkdir(); 
FileOutputStream out = null; 
Calendar c = Calendar.getInstance(); 
String date = fromInt(c.get(Calendar.MONTH)) 
      + fromInt(c.get(Calendar.DAY_OF_MONTH)) 
      + fromInt(c.get(Calendar.YEAR)) 
      + fromInt(c.get(Calendar.HOUR_OF_DAY)) 
      + fromInt(c.get(Calendar.MINUTE)) 
      + fromInt(c.get(Calendar.SECOND)); 
imageFileName = new File(imageFileFolder, date.toString() + ".jpg"); 
try 
{ 
out = new FileOutputStream(imageFileName); 
bmp.compress(Bitmap.CompressFormat.JPEG, 100, out); 
out.flush(); 
out.close(); 
scanPhoto(imageFileName.toString()); 
out = null; 
} catch (Exception e) 
{ 
e.printStackTrace(); 
} 
} 


public String fromInt(int val) 
{ 
return String.valueOf(val); 
} 


public void scanPhoto(final String imageFileName) 
{ 
msConn = new MediaScannerConnection(PreviewDemo1.this,new MediaScannerConnectionClient() 
{ 
public void onMediaScannerConnected() 
{ 
msConn.scanFile(imageFileName, null); 
Log.i("msClient obj in Photo Utility","connection established"); 
} 
public void onScanCompleted(String path, Uri uri) 
{ 
msConn.disconnect(); 
Log.i("msClient obj in Photo Utility","scan completed"); 
} 
}); 
msConn.connect(); 
} 

我在這裏保存圖像的「旋轉」文件夾,如果你不想,你可以在savePhoto方法輕易改變它。

+1

感謝蘇倫德拉+1你:)它完美 –

+0

它的回答 – Jayesh

+0

不要忘記正常使用... +1在AndroidManifest.xml中用' '設置WRITE_EXTERNAL_STORAGE權限。 –

5

我知道我有點遲到回答這個問題,但我想其他人閱讀這個由surendra給出的答案是正確的,並且使用MediaScannerConnection是一種更新圖庫的方法。至於nevva暗示他的代碼更改方式如下:

Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
    Uri contentUri = Uri.fromFile(f); 
    mediaScanIntent.setData(contentUri); 
    getApplicationContext().sendBroadcast(mediaScanIntent); 
1

只需使用MediaScannerConnection您保存您的位圖後,SD:

MediaScannerConnection.scanFile(this, 
       new String[] { Bitmapfile.getAbsolutePath() }, null, 
       new MediaScannerConnection.OnScanCompletedListener() { 
        public void onScanCompleted(String path, Uri uri) { 
         //now visible in gallery 
        } 
       } 
      );