主动通知Android系统图库进行更新
2016-04-13 13:08
531 查看
该问题主要是存在于当我们下载图片后,再去遍历图片,会发现图库中,找不到我们刚下载好的相应图片。
这就是因为android的机制是定时图库刷新图片,因此,当我们下载好的图片的时候,图库并不知道此时已经图库已经更新了,只有通知图库说,有新图片了,你刷新一下,它才会去查询新增了什么图片。
项目中遇到调用图库进行图片的选择,因为不能主动及时更新,遂实现代码调用实现主动及时更新。
废话不多刷,看代码。
方式一,发送一个广播,
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.parse("file://"+fileSD_file)));
方式二,通过MediaScannerConnection 类
MediaScannerConnection.scanFile(context, new String[]{fileSD_file.toString()}, null, null);
方式三,也是通过MediaScannerConnection 类
MediaScannerConnection msc=new MediaScannerConnection(context,new MediaScannerConnectionClient(){
@Override
public void onMediaScannerConnected() {
// TODO Auto-generated method stub
}
@Override
public void onScanCompleted(String path, Uri uri) {
// TODO Auto-generated method stub
}
});
msc.connect();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
URL url = null;
try {
url = fileSD_file.toURL();
} catch (MalformedURLException e) {
e.printStackTrace();
}
MimeTypeMap mtm=MimeTypeMap.getSingleton();
msc.scanFile(fileSD_file.toString(), mtm.getMimeTypeFromExtension(mtm.getFileExtensionFromUrl(url.toString())));
//此句上面的一句可以,下面的一句也可以,都适合这种方法(已用颜色标示)。
// msc.scanFile(fileSD_file.getAbsolutePath(), null);
msc.disconnect();
这就是因为android的机制是定时图库刷新图片,因此,当我们下载好的图片的时候,图库并不知道此时已经图库已经更新了,只有通知图库说,有新图片了,你刷新一下,它才会去查询新增了什么图片。
项目中遇到调用图库进行图片的选择,因为不能主动及时更新,遂实现代码调用实现主动及时更新。
废话不多刷,看代码。
方式一,发送一个广播,
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.parse("file://"+fileSD_file)));
方式二,通过MediaScannerConnection 类
MediaScannerConnection.scanFile(context, new String[]{fileSD_file.toString()}, null, null);
方式三,也是通过MediaScannerConnection 类
MediaScannerConnection msc=new MediaScannerConnection(context,new MediaScannerConnectionClient(){
@Override
public void onMediaScannerConnected() {
// TODO Auto-generated method stub
}
@Override
public void onScanCompleted(String path, Uri uri) {
// TODO Auto-generated method stub
}
});
msc.connect();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
URL url = null;
try {
url = fileSD_file.toURL();
} catch (MalformedURLException e) {
e.printStackTrace();
}
MimeTypeMap mtm=MimeTypeMap.getSingleton();
msc.scanFile(fileSD_file.toString(), mtm.getMimeTypeFromExtension(mtm.getFileExtensionFromUrl(url.toString())));
//此句上面的一句可以,下面的一句也可以,都适合这种方法(已用颜色标示)。
// msc.scanFile(fileSD_file.getAbsolutePath(), null);
msc.disconnect();
相关文章推荐
- 【Android】虚拟环绕声
- Android Studio调试功能使用总结
- Android 中View类DrawingCache的使用
- android事件关系分析图解
- Android 生成keystore,两种方式
- Illegal resource reference: @*android resources are private and not always present 解决方案
- android的Bundle
- android学习12——重载SurfaceView一些方法的执行顺序
- Gradle下载的依赖包位置
- Android中Listview实现分页加载效果OnScrollListener
- Android开发 debug的使用
- Android一个ListView列表之中插入两种不同的数据
- 关于android混淆
- android设备在ubuntu中连接后设备unauthorized未授权
- Android Framework的启动过程
- Android布局优化之ViewStub、include、merge使用与源码分析
- 山东省第二届ACM大学生程序设计竞赛:The Android University ACM Team Selection Contest
- java中的反射机制在Android开发中的用处
- 我们也说说Android.mk(5) - 案例教程
- Android stdio Ndk HelloWorld