如何获取媒体库中所有音频文件信息,并在文件增删后及时更新媒体库

在4.4版本之前,我们可以使用发送广播的方式,强制刷新多媒体库

IntentFilter intentFilter = new IntentFilter(
        Intent.ACTION_MEDIA_SCANNER_STARTED);
    intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
    intentFilter.addDataScheme("file");
    sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
        Uri.parse("file://"
            + Environment.getExternalStorageDirectory()
                .getAbsolutePath())));

发送广播之后,还需要注册一个广播接受者,来接受并处理扫描开始和结束事件

private class ScanReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
      String action = intent.getAction();
      // 当系统开始扫描sd卡时,为了用户体验,可以加上一个等待框
      if (Intent.ACTION_MEDIA_SCANNER_STARTED.equals(action)) {
      }
      // 当系统扫描完毕时,停止显示等待框,并重新查询ContentProvider
      if (Intent.ACTION_MEDIA_SCANNER_FINISHED.equals(action)) {
      }
    }
  }

通过这种方式,我们便可以强制更新媒体库。

但是,在4.4之后,Android对一些操作的权限提高,如果在4.4的系统上使用这种方式,便会出现下面的错误

Caused by: java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED from pid=22360, uid=10163

这是因为在4.4之后,这个广播只有系统应用才能发出,因此,我们不能使用这种方式了,我们可以使用下面的代码实现相同的功能:

MediaScannerConnection.scanFile(this, new String[] { Environment
        .getExternalStorageDirectory().getAbsolutePath() }, null, null);

使用MediaScannerConnection的scanFile方法,就可以强制扫描我们需要更新的文件路径,之后媒体数据库也会同步更新,这样,就不会出现文件删除,在媒体库中却能搜索到的情况了,也能解决这位朋友提出的新增加歌曲的信息获取问题了。

原文:

http://www.tuicool.com/articles/vyYZny

时间: 2024-12-25 05:28:54

如何获取媒体库中所有音频文件信息,并在文件增删后及时更新媒体库的相关文章

【Android开发经验】如何获取媒体库中所有音频文件信息,并在文件增删后及时更新媒体库(转)

转载请注明出处: http://blog.csdn.net/zhaokaiqiang1992 今天一打开博客,发现一位朋友给我发了一封私信,请教下面的问题,所以特写此文章,为其解惑. 从这位朋友的提问中,我们需要了解下面的这些问题,才能给他很好的解答: (1)如何获取手机里所有歌曲的信息? (2)在歌曲文件发生改变,比如增删操作之后,如何及时的更新媒体库,从而获取到最新的歌曲信息? (3)在4.4版本之后,扫描sd卡,更新媒体库的操作发生变化了吗? 下面,我将就以上三个问题,进行解答. (1)如

C#实现多文件上传,写到文件夹中,获取文件信息以及下载文件和删除文件

前台:.js //上传附件 function uploadAttachment() { if ($("#Tipbind").attr('checked')) { var ip = $("#TunBandIP").val(); if ($.trim(ip) == 0) { return $.messager.show({ title: '提示', msg: '请先选择IP' }); } $('#ImprotDlg').dialog('open'); uploadFy(

获取Java类中注解的详细信息

前言:这篇博客主要是为了后续的获取SpringMVC中的全部请求URL做的准备. public class AnnotationHelper { private static final AnnotationHelper helper = new AnnotationHelper(); protected AnnotationHelper() { } public static AnnotationHelper getInstance() { return helper; } /** * 得到类

通达OA 获取通达OA中的用户Session信息

对应WEB程序来说获取Session信息是非常重要的功能,通过查询通达网站上得到了相应的方法. 1.常规方法:$_SESSION["LOGIN_USER_ID"] 2.需要包含:include_once("inc/auth.php");,然后直接用$LOGIN_USER_ID即可.

plist文件无法打包进.a静态库中

问题: 之前一直在做静态库的编写与维护,也一直知道静态库的图片资源是没办法打进.a中的.可是突然有个想法.由于有非常多參数的配置是在一个plist文件里的.尽管也知道这是一个plist文件,可是想想和图片资源还是有一定差别的.所以就尝试着是否能把plist打进静态库中. 分析: 1. 创建了一个简单的生成静态库的功能,然后公开了一个接口.用来输出读取plist文件的结果. 2. 创建一个简单的project,来使用上一步生成的.a文件,然后调用那个公开的接口. 3. 结果是无法读取,输出为nul

通过python获取苹果手机备份文件中的照片,视频等信息采集

前言:苹果手机用户通常会将手机备份到电脑上,而备份文件通常不会自动删除.在我们电脑取证,或者***到一台电脑后可以通过python脚本获取到备份文件中的一些隐私信息,比如照片.视频.相关软件中的一些账号,联系信息等等.但是我们进入到备份文件目录,会发现文件都没有后缀名,而且很乱.似乎没有什么用.我们看到的如下:备份目录(win7):C:\Users\你的用户名\AppData\Roaming\Apple Computer\MobileSync\Backup\ 在备份文件的根目录下有个Manife

ASP.NET中的文件操作(文件信息,新建,移动,复制,重命名,上传,遍历)(亲测详细)

做了几天的文件操作,现在来总结一下,错误之处,还望指点!以文件为例,如果对文件夹操作,基本上将File换为Directory即可(例:FileInfo file = new FileInfo(Path);与DirectoryInfo directory = new DirectoryInfo (Path);) 1获取文件信息 在知道文件相对路径的情形,下面代码可以获取文件的详细信息 1 public static void fileinfo(string Path) 2 { 3 Path = S

stm32库中地址映射

摘要:分析stm32库中如何找到GPIOA寄存器的地址. 关键字:stm32:库:地址映射 一.预备知识 在编写ARM9裸机的程序时,读写某个寄存器可用如下代码实现: 例如,要读写UART_ULCON1寄存器的值,查找ARM9的用户手册就可已得到该寄存器地址. #define UART_ULCON1 (volatile unsigned int *)(0x50004000) 写寄存器: *UART_ULCON1 = 0X00FF; 读寄存器: unsigned int temp; temp = 

查看当前库中所有的触发器

--查看当前库中所有的触发器: SELECT * FROM Sysobjects WHERE xtype = 'TR' --查看当前库中所有的触发器和与之相对应的表: SELECT tb2.name AS tableName,tb1.name AS triggerName FROM Sysobjects tb1 JOIN Sysobjects tb2 ON tb1.parent_obj=tb2.id WHERE tb1.type='TR' --显示触发器的定义: EXEC sp_helptext