操作MediaStore
/**
* 向 MediaStore 中插入图片数据,并产生一个缩略图
* 不需要指定路径,会自动将图片保存至 Picture 目录下
*/
public static void MediaStore.Image.Media.insertImage(
ContentResolver cr, Bitmap source, String title, String description)
/**
* 向 MediaStore 中插入图片数据,并产生一个缩略图
* 指定路径,会保存图片到指定路径,并复制一份保存至 Picture 目录下,不推荐
*/
public static void MediaStore.Image.Media.insertImage(
ContentResolver cr, String imagePath, String name, String description)
发送广播
在Android 4.4之前可以使用`ACTION_MEDIA_MOUNTED`来刷新,但是在Android 4.4之后该广播只可以由系统进行广播,App只能进行监听,因此改为用`ACTION_MEDIA_SCANNER_SCAN_FILE`来刷新媒体库
添加后刷新
String path = "文件绝对路径";
String uri = Uri.fromFile(new File(path));
// 或者String uri = Uri.parse(path);
// 或者String uri = new File(path).toURI().toString;
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri);
sendBroadcast(intent);
注意这里的uri必须以Environment.getExternalStorageDirectory()的返回值开头。
删除后刷新
不能像添加时的操作去刷新,因为源码中判断了文件路径为空或无效则返回,因此使用ContentResolver来进行刷新:
contentResolver.delete(Images.Media.EXTERNAL_CONTENT_URL,
Images.Media.DATA + "=?", new String[]{file.getAbsolutePath()});
操作MediaScannerConnection类
/**
* 可传递多个路径,MimeType必填,且不能为通配符*/*或null
*/
MediaScannerConnection.scanFile(Context context, String[] paths,
String[] mimeTypes, OnScanCompleteListener callback)