MediaScannerConnection 作用是为应用提供一个媒体扫描服务,当有新创建或者下载的文件时,会从该文件读取元数据并将该文件添加到媒体中去。
当我们添加一个文件的时候,我们需要刷新媒体库才能立即找得到添加文件,MediaScannerConnection可以为我们解决这一问题
private MediaScannerConnection mScanner;
public void saveBitmapInFile(final String path, Bitmap bitmap) {
FileOutputStream fos = null;
try {
fos = new FileOutputStream(path);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
if (mScanner == null) {
MediaScannerConnection connection = new MediaScannerConnection(getActivity(),
new MediaScannerConnection.MediaScannerConnectionClient() {
public void onMediaScannerConnected() {
mScanner.scanFile(path, null /* mimeType */);
}
public void onScanCompleted(String path1, Uri uri) {
if (path1.equals(path)) {
mScanner.disconnect();
mScanner = null;
}
}
});
connection.connect();
mScanner = connection;
}
} catch (IOException e) {
e.printStackTrace();
} catch (OutOfMemoryError error) {
error.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
保存图片后调用下MediaScannerConnection 扫描文件就可以了,注意只能扫描单个文件,不能扫描整个文件夹
还有一种跟简单的方法就是发送广播,通知系统扫描保存后的文件:
-
//保存图片后发送广播通知更新数据库
-
Uri uri = Uri.fromFile(file);
-
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));