为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Android上刷新MediaStore?

如何在Android上刷新MediaStore?

米琪卡哇伊 2019-07-16 16:09:01
如何在Android上刷新MediaStore?这开始是Android论坛上的一个普通用户问题。然而,这已经成为了一个必然的编程问题。这是我的问题。Android有一项服务-MediaScaner-随时在后台运行(我相信)SD卡是未安装和重新安装的。该服务收集卡上所有媒体文件的数据,并提供一个SQLite DB,音乐应用程序可以查询该数据库。大多数音乐应用程序使用此服务,因为它节省了与扫描SD卡相关的电池损耗。自从我开始使用Android以来,我一直有一个问题,就是即使从SD卡中删除了M3U播放列表,与设备同步的M3U播放列表仍然保留在这个SQLite DB中。它已经到了一点,我现在有一个大约40个播放列表显示在任何我使用的音乐应用程序,尽管只有大约10个M3U文件在卡上。其余的播放列表不播放,并且是空的。我可以手动删除他们从音乐应用程序,但我厌倦了这样做。一定有更好的方法来删除这些幽灵播放列表。Android市场上有两个应用程序-SDRescan和MusicScaner,这两款应用据说都做到了这一点,但两者都不起作用。我开始编写自己的应用程序来刷新或删除MediaStore数据库,并从头开始,但我并没有走得太远。我有一个Android应用程序,它运行以下代码:sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,          Uri.parse("file://" + Environment.getExternalStorageDirectory())));我已经在网上找到了一些这段代码的例子,作为扫描SD卡的一种方式,但是我没有任何运气。有小费吗?完整代码:package com.roryok.MediaRescan;import android.app.Activity;import android.content.Intent;import android.content.IntentFilter;import android.net.Uri;import android.os.Bundle;import android.os.Environment;public class MediaRescan extends Activity {     /** Called when the activity is first created. */     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,                  Uri.parse("file://" + Environment.getExternalStorageDirectory())));          setContentView(R.layout.main);     }     //Rescan the sdcard after copy the file     private void rescanSdcard() throws Exception{            Intent scanIntent = new Intent(Intent.ACTION_MEDIA_MOUNTED,                  Uri.parse("file://" + Environment.getExternalStorageDirectory()));          IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_SCANNER_STARTED);       intentFilter.addDataScheme("file");            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,                  Uri.parse("file://" + Environment.getExternalStorageDirectory())));         }}
查看完整描述

3 回答

?
莫回无

TA贡献1865条经验 获得超7个赞


可以使用以下代码请求特定文件的重新扫描。

注意:传递的MIME类型很重要。我注意到,如果我使用“*/*”,对MP3 ID3标记所做的更改不能在SQLite中正确刷新,但是使用“音频/mp3”是有效的。

MediaScannerConnection.scanFile(
    context, 
    new String[]{ pathToFile1, pathToFile2 }, 
    new String[]{ "audio/mp3", "*/*" }, 
    new MediaScannerConnectionClient()
    {
        public void onMediaScannerConnected()
        {
        }
        public void onScanCompleted(String path, Uri uri)
        {
        }
    });


查看完整回答
反对 回复 2019-07-17
  • 3 回答
  • 0 关注
  • 369 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信