如何更新 Android 媒体数据库

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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 映像中。没有在真实设备上检查过。

【讨论】:

以上是关于如何更新 Android 媒体数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何从 azure storage 或媒体 serviceazure 更新元数据媒体文件

Android开发本地及网络Mp3音乐播放器(十九)通知媒体库更新刚下载的MP3

Android媒体播放器没有完全寻求进展

Android多媒体信息获取

用于 Android Q 上的辅助存储的媒体扫描仪

Android 如何获取activity返回的数据?