当前位置: 首页 > 编程笔记 >

Android 媒体库数据更新方法总结

漆雕嘉茂
2023-03-14
本文向大家介绍Android 媒体库数据更新方法总结,包括了Android 媒体库数据更新方法总结的使用技巧和注意事项,需要的朋友参考一下

Android 媒体库数据更新方法总结

在项目中,我们经常要创建个自己的目录,里面存放一些图片啊文件之类,比如:我在SD卡中刚创建了一个文件夹A,里面放入了照片B,那么,这个时候我立马去Gallery里面查看这个目录里的照片,那么,我是无法看到的。

这是什么原因呢?

因为Android系统在启动的时候会启动MediaScannerService扫描系统上的多媒体文件,然后将这些多媒体文件的信息加入到多媒体数据库中,应用程序要取得这些多媒体信息就是从这个多媒体数据库里面去取的,并不是从SD卡中取。也就是说,如果开机后增加或删除了一些多媒体,这个多媒体数据库是不会自动刷新的。

解决办法:1,开机重启;2,更新媒体库数据信息;

对于方法1,这个我们不可能添加个文件就去重启一次手机,因此这个pass。

对于方法2:

网上常用的方法是通过广播发送消息给系统,让系统自动更新一次媒体库,代码如下:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"  
     + Environment.getExternalStorageDirectory()))); 

这里,我们可以发送两个消息:Intent.ACTION_MEDIA_MOUNTED 是对媒体库进行全扫描;

Intent.ACTION_MEDIA_SCANNER_SCAN_FILE则是 扫描某个文件; 

经测试,这个方法对于android4.4以下的版本,是没有问题的,但是从android4.4开始,使用这个方法,会出现如下的异常:

Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED

这个问题会导致APP直接Crash。

经过查看SDK开发文档,我们发现,上述方法从android4.4开始,已经不再被允许。开发文档指出:4.4开始,不再允许非系统应用发送系统消息,而Intent.ACTION_MEDIA_MOUNTED正是系统消息,因此,为了解决不同版本的兼容问题,我们无法继续使用上述方法。

那要如何解决这个问题呢?

刚刚我们也说了,android系统在启动的时候会启动MediaScannerService扫描系统上的多媒体文件,那么,我们如果在查看Gallery之前,扫描一次多媒体文件,不是就解决了?

直接上代码:

private void updateGallery(String filename)//filename是我们的文件全名,包括后缀哦 
  { 
    MediaScannerConnection.scanFile(this, 
         new String[] { filename }, null, 
         new MediaScannerConnection.OnScanCompletedListener() { 
       public void onScanCompleted(String path, Uri uri) { 
         Log.i("ExternalStorage", "Scanned " + path + ":"); 
         Log.i("ExternalStorage", "-> uri=" + uri); 
       } 
     }); 
  } 

有了这个函数,当我们添加一个图像文件后,直接调用一下这个函数,对添加的图像文件进行扫描,就OK了,这样由于只是扫描了我们添加的文件,并非对整个媒体库文件进行扫描,因此,效率最高。经测试,上述方法可以完美解决媒体库更新的难题!

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

 类似资料:
  • 有时我们需要更新媒体库以让应用自动发现最新的媒体库。 通过startMediaScan方法开始更新媒体库1: chrome.mediaGalleries.startMediaScan(); 1 从Chrome 35开始支持。 startMediaScan没有然后返回值,也不会调用任何回调函数,因为更新的过程所花费的时间可能非常长,所以要使用onScanProgress来监听更新过程: chrom

  • 我是在Android应用程序中使用SQL的新手,并且我在更新使用listView创建的表时遇到了一些麻烦。我设法从listView中更新了一个元素,但它不是正确的元素,它总是列表中的第一个元素发生了变化。 我制作了一个只有一列的表(稍后我将添加更多的两列),下面是我如何构建它: TaskContract_Faltas.java TaskDbHelper_Faltas Faltas.java 我使用

  • 本文向大家介绍C#连接数据库和更新数据库的方法,包括了C#连接数据库和更新数据库的方法的使用技巧和注意事项,需要的朋友参考一下 对数据库的操作总体可以分为两类:查询(select)和更新(insert,delete,update)。为什么这样来分呢?仔细看看两类的区别,select只是从数据库中将数据拿出来使用,而其余三者都会对数据库的物理数据进行修改。这篇文章将接着阐述更新数据。 更新数据库信息

  • 本文向大家介绍Android UI更新的几种方法总结,包括了Android UI更新的几种方法总结的使用技巧和注意事项,需要的朋友参考一下  Android UI更新 做过Android开发的人都遇到过这样的问题:随着需求的变化,某些入口界面会出现UI的增减、内容变化和跳转界面变化等问题,这里就说明几种方法来实现 UI的更新。 1、Activity的 runOnUiThread   android

  • 本文向大家介绍Thinkphp批量更新数据的方法汇总,包括了Thinkphp批量更新数据的方法汇总的使用技巧和注意事项,需要的朋友参考一下 以下小编给大家列出了三种实现thinkphp批量更新数据的方法,写的不好还请见谅,有意见欢迎提出,共同学习进步! 方法一: 方法二: 即是循环一条一条的更新记录。一条记录update一次,这样性能很差,也很容易造成阻塞。 那么能不能一条sql语句实现批量更新呢

  • 下载url来自一个单独的图像选择方法,顺便说一句。我的用户创建代码是这样的。