【问题标题】:How to update the Android media database如何更新 Android 媒体数据库
【发布时间】:2011-03-09 18:36:43
【问题描述】:

我的应用程序显示 sdcard 中的歌曲列表,并且有一个从 SD 卡中删除歌曲的选项。

即使歌曲被删除,歌曲仍然出现在我的应用程序列表中。

如何更新 android 媒体数据库并显示更新后的数据库?

【问题讨论】:

    标签: android database media


    【解决方案1】:

    Android 有一个用于跟踪媒体文件的缓存。

    试试这个:

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

    它会使 MediaScanner 服务再次运行,这应该会从设备的缓存中删除已删除的歌曲。

    您还需要将此权限添加到您的 AndroidManifest.xml:

    <intent-filter>
      <action android:name="android.intent.action.MEDIA_MOUNTED" />
      <data android:scheme="file" /> 
    </intent-filter>
    

    【讨论】:

    • 感谢您的回复,但现在我得到一个空白屏幕,并且日志 cat 显示 03-10 02:24:08.222: ERROR/MediaScannerService(401): 无法删除文件 /data/data/com。 android.providers.media/pause_scan 我认为当我将代码放在 doInBackground 中时,代码永远不会到达异步任务的 onPostExecute
    • 好的,空白屏幕可能是因为我的连接类型是磁盘驱动器。但问题仍然存在,我正在获取歌曲列表并且它没有更新
    • 好吧,我明白了……我不能让这件事变得更丑陋。在做我的事情时,我评论了 sendBroadcast 的东西 :) 但我仍然必须再次运行应用程序才能看到效果
    • 活动必须完成然后重新开始才能显示更新的列表
    • @Marc,你太棒了...谢谢。
    【解决方案2】:

    对于 ICS 之前的 Android,发送ACTION_MEDIA_MOUNTED 广播:

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

    对于 ICS 和 Jelly Bean,您可以使用MediaScannerConnection API 来扫描媒体文件

    【讨论】:

      【解决方案3】:

      图库刷新,包括 Android KITKAT

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
      {
              Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
              File f = new File("file://"+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES));
              Uri contentUri = Uri.fromFile(f);
              mediaScanIntent.setData(contentUri);
              this.sendBroadcast(mediaScanIntent);
      }
      else
      {
             sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
      } 
      

      【讨论】:

      • 不知何故这对我在 Android 6 (Marshmallow) 上不起作用......有什么想法吗?
      • 对于棉花糖,你需要获得运行时权限才能写入手机存储@Taifun
      • 谢谢@karthikvishnukumar,我现在使用this solution成功了
      【解决方案4】:

      以下内容仅在模拟器上进行了测试。 解决方案适用于 2.2 和 2.3,但不适用于 4。在第 4 个 Android 模拟器上,此操作对 LogCat 中的消息没有任何作用:

      权限拒绝:广播意图

      很遗憾,没有找到为 Android 4 更新媒体存储的方法 未在 Android 3 上测试。

      该错误也发生在 2.3.3 Intel 映像中。没有在真实设备上检查过。

      【讨论】:

        猜你喜欢
        • 2014-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-30
        • 2015-10-01
        • 2017-09-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多