2011-10-07 47 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 
        } 
       } 
      );