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

本文介绍了如何在不同Android版本中强制刷新多媒体库的方法。对于4.4版本之前的系统,可以通过发送广播来触发刷新过程;而在4.4及以后版本,则推荐使用`MediaScannerConnection.scanFile`方法来实现相同功能。

在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

转载于:https://www.cnblogs.com/H-BolinBlog/p/5415720.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值