【问题标题】:Can't find a consistent method of loading media files from Android SD card找不到从 Android SD 卡加载媒体文件的一致方法
【发布时间】:2013-03-14 12:46:57
【问题描述】:

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

这是在我的平板电脑上运行的代码。这是更好的方法,它允许我访问文件中的所有详细信息,包括艺术家、专辑、专辑封面等......(我的平板电脑正在运行 jelly bean。)

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);
}
}

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

非常感谢

【问题讨论】:

    标签: android media sd-card


    【解决方案1】:

    对于 >= API 级别 10,您可以使用公共类 MediaMetadataRetriever 来获取媒体信息。此链接包含有关使用它的示例---Query MP3 Information using Android supported function---

    希望这对你有所帮助。

    【讨论】:

    • 非常感谢...我会试一试的。你知道为什么我用上述方法看到不同的结果吗?是不是因为我的平板电脑和虚拟设备使用了不同的 API?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多