如何更新 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 更新元数据媒体文件