【发布时间】:2018-03-24 21:00:50
【问题描述】:
我想在我的设备上检索歌曲的元数据(艺术家、专辑、路径、名称、长度)。这是我正在使用的代码。
String selection = MediaStore.Audio.Media.InterfaceConsts.IsMusic + " != 0";
String[] projection = {
MediaStore.Audio.Media.InterfaceConsts.Artist, //artist
MediaStore.Audio.Media.InterfaceConsts.Album, //album
MediaStore.Audio.Media.InterfaceConsts.Data, //path
MediaStore.Audio.Media.InterfaceConsts.DisplayName, //title
MediaStore.Audio.Media.InterfaceConsts.Duration
};
var cursor = myContentResolver.Query(
MediaStore.Audio.Media.ExternalContentUri,
projection,
selection,
null,
null);
while (cursor.MoveToNext())
{
string path = cursor.GetString(2); string name = cursor.GetString(3); string artist = cursor.GetString(0); string album cursor.GetString(1); string duration = cursor.GetString(4);
}
此代码的问题是歌曲的长度不正确。对于某些歌曲,它返回的时间比它应该的要短。所以我只使用一段代码来获取歌曲的长度。这是代码:
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.SetDataSource(path); //path is the path of the song file
lenth = mmr.ExtractMetadata(MetadataKey.Duration);
但是这段代码还有另一个问题。对于某些歌曲,我在第 2 行得到一个例外:
Java.Lang.RuntimeException: setDataSource failed: status = 0x80000000
我还想说我在使用权限:
Manifest.Permission.ReadExternalStorage,
Manifest.Permission.Internet
我正在为我的项目使用 Xamarin.Android。
【问题讨论】:
-
您正在测试的 Android 版本是什么?根据这个post,异常可能是由文件路径引起的。
-
我正在使用 Android 8.0 在我的三星 Galaxy S8+ 上进行测试。
标签: android audio xamarin.android metadata