zoukankan      html  css  js  c++  java
  • 如何获取媒体库中所有音频文件信息,并在文件增删后及时更新媒体库

    在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

  • 相关阅读:
    容器化的Apache服务并监控
    Jenkins配置报告与邮件插件
    Jmeter(二十八)_Docker+Jmeter+Gitlab+Jenkins+Ant(容器化的接口自动化持续集成平台)
    Jmeter(二十二)_jenkins配置gitlab插件与ant插件
    Jmeter(二十二)_脚本上传Gitlab
    Jmeter(二十七)_Beanshell保存响应内容到本地
    Jmeter(二十六)_数据驱动测试
    IT实用技术资源整理
    Jmeter(二十五)_Xpath关联
    Jmeter(二十四)_服务器性能监控
  • 原文地址:https://www.cnblogs.com/H-BolinBlog/p/5415720.html
Copyright © 2011-2022 走看看