android 删除、重名命文件,刷新 Android 的 MediaStore,让你文件立即出现
原创MediaStore,本质上是 Android 维护的一个文件系统的数据库,它记录了当前磁盘上所有的文件索引,我们可以通过它,快速的查找当前系统的文件。
MediaStore 刷新的时机是不一定的,也就是说,保存、删除、重命名 的一张图片文件,MediaStore 并不会立即刷新文件系统,将此文件索引记录下来。而系统本身是存在一些自动刷新 MediaStore 的时机,例如:重启手机。表现就是,当你保存了一张图片到本地文件夹中之后,通过文件管理器类的 App,可以在目录下找到这涨照片,但是在系统相册中,是无法立即看到它的,
所以在我们保存、删除、操作文件之后,去触发系统刷新 MediaStore 就尤为重要了。
重命名文件
//旧的文件
File file = new File(photoBean.getFilePath());
String newname = inputStr+photoBean.getFileType();
File f2 = new File(file.getParent()+File.separator+newname);
boolean b = file.renameTo(f2);
if(f2.exists()){
Log.e("新的文件存在,重命名成功",f2.getPath());
//通知MediaStore刷新删除的文件
notifyLocalMedia(file.getPath());
//通知MediaStore刷新重命名的文件
updateGallery(f2.getPath());
删除文件
for(int i=0;i<delList.size();i++){
System.gc();
File file = new File(delList.get(i).getFilePath());
boolean delete = file.delete();
if(!file.exists()){
Log.e("TGA","删除的文件已经不存在了");
notifyLocalMedia(file.getPath());
updateGallery(file.getPath());
}
通知MediaStore刷新文件
//通知MediaStore刷新删除的文件
private void notifyLocalMedia(String imgPath) {
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(Uri.fromFile(new File(imgPath)));
mContext.sendBroadcast(intent);
// 通知MediaStore刷新新的文件
private void updateGallery(String filename)//filename是我们的文件全名,包括后缀哦
MediaScannerConnection.scanFile(mContext,
new String[] { filename }, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.e("TGA","刷新成功,文件路径:" + path);