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