0

尝试从 SD 卡加载音乐时,我的平板电脑和我的 AVD 模拟设备之间的结果不一致。适用于我的平板电脑的方法不适用于虚拟设备,反之亦然。

这是适用于我的平板电脑的代码。这是更好的方法,允许我访问文件中的所有详细信息,包括艺术家、专辑、专辑封面等……(我的平板电脑正在运行果冻豆。)

Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor cur = mContentResolver.query(uri, null,
  MediaStore.Audio.Media.IS_MUSIC + " = 1", null, null);

cur.moveToFirst();
{   
    do {
HashMap<String, Object> song = new HashMap<String, Object>();
song.put("songTitle", cur.getString(titleColumn));

Uri path = ContentUris.withAppendedId(uri,cur.getLong(idColumn));
String songPath = path.toString();
song.put("songPath", songPath);
song.put("artistName",cur.getString(artistColumn));
song.put("albumName",cur.getString(albumColumn));
song.put("albumId", cur.getInt(albumIdColumn));
song.put("songId", cur.getInt(idColumn));

songsList.add(song);

} while (cur.moveToNext());
}  

但是在模拟设备上,光标是空的,所以没有歌曲被添加到列表中。我已经将歌曲推送到模拟器的 sd 卡上,但没有运气。以下代码确实在虚拟设备上找到了歌曲,但只提供了歌曲名称和文件路径,没有提供艺术家或专辑信息。(虚拟设备为 Android 4.2 和 API 级别 17)

final String MEDIA_PATH = new String("/sdcard/");
File home = new File(MEDIA_PATH);

if (home.listFiles(new FileExtensionFilter()).length > 0) {
for (File file : home.listFiles(new FileExtensionFilter())) {

    HashMap<String, Object> song = new HashMap<String, Object>();
    song.put("songTitle", file.getName().substring(0, 
             (file.getName().length() - 4)));
    song.put("songPath", file.getPath());

    songsList.add(song);
}
}

但是,当此代码在我的平板电脑上运行时,文件(主页)为空,并且不返回任何数据。我此时的解决方案是双向运行以填充歌曲列表。但是,对于必须使用第二种方法的任何设备,我不会有艺术家或专辑信息。我是否在这里遗漏了什么,可能是与虚拟设备相关的异常情况,或者这只是处理这么多不同设备的挫败感?

非常感谢

4

1 回答 1

0

对于 >= API 级别 10,您可以使用公共类MediaMetadataRetriever来获取媒体信息。此链接包含有关使用它的示例---使用 Android 支持的功能查询 MP3 信息---

希望这对您有所帮助。

于 2013-03-14T02:52:04.643 回答