我正在开发一个 MP3 应用程序,我想在其中索引我的 SDCard 上的文件。最好的方法是什么?
我的想法。首次启动应用程序时搜索文件,并为 SDCard 状态更改意图注册广播接收器,并在广播意图时搜索文件。
但是在这种情况下,如果我的广播接收器在 10 秒内没有返回,ANR 就会出现。
寻找更好和故障安全的想法。谢谢。
我正在开发一个 MP3 应用程序,我想在其中索引我的 SDCard 上的文件。最好的方法是什么?
我的想法。首次启动应用程序时搜索文件,并为 SDCard 状态更改意图注册广播接收器,并在广播意图时搜索文件。
但是在这种情况下,如果我的广播接收器在 10 秒内没有返回,ANR 就会出现。
寻找更好和故障安全的想法。谢谢。
为了避免 ANR,您需要在 UI 线程之外进行搜索。由于 SD 卡可能很大,您可能希望在服务中而不是在前台活动中执行此操作,以便用户可以在搜索过程中将他们的设备用于其他事情。
但是 android 已经找到并索引了支持的媒体文件,所以你应该看看你是否可以利用内置的 MediaScanner 东西。
同意 Chris,MediaScanner 会为您找到音乐,填充 MediaStore 数据库。下面是一些查找音乐条目的代码:
final Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
final String[] cursor_cols = {
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.TITLE,
};
final String where = MediaStore.Audio.Media.IS_MUSIC + "=1";
final Cursor cursor = getContentResolver().query(uri, cursor_cols, where, null, null);
cursor.moveToNext();
final String artist = cursor.getString(_cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
final String album = cursor.getString(_cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM));
final String track = cursor.getString(_cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
doSomethingInteresting(artist, album, track);
“数据”字段包含一个可用于 MediaPlayer 的句柄。