这最初是 Android 论坛上的一般用户问题。然而,它必然成为一个编程问题。这是我的问题。
Android 有一项服务 - MediaScanner - 随时在后台运行(我相信)SD 卡被卸载并重新安装。该服务收集卡上所有媒体文件的数据,并提供可供音乐应用程序查询的 SQLite DB。大多数音乐应用程序都使用此服务,因为它可以节省与扫描 SD 卡相关的电池消耗。
自从我开始使用 android 以来,我一直遇到一个问题,即同步到设备的 M3U 播放列表即使在从 SD 卡中删除后仍保留在此 SQLite DB 中。尽管卡上只有大约 10 个 m3u 文件,但现在我使用的任何音乐应用程序中都显示了大约 40 个播放列表的集合。剩余的播放列表不播放,并且是空的。我可以通过从音乐应用程序中删除它们来手动删除它们,但我厌倦了这样做。必须有更好的方法来删除这些幽灵播放列表。
Android Market 上有两个应用程序 - SDRescan 和 Music Scanner,据说它们完全可以做到这一点,但它们都不起作用。
我开始编写自己的应用程序来刷新或删除 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())));
}
}