C# 仅获取音乐文件详细信息
基本上,我试图在android设备中获取音乐文件的详细信息(例如音乐的标题、艺术家等),并将其存储到C# 仅获取音乐文件详细信息,c#,android,xamarin,xamarin.android,C#,Android,Xamarin,Xamarin.android,基本上,我试图在android设备中获取音乐文件的详细信息(例如音乐的标题、艺术家等),并将其存储到列表中(SongData包含列表,它包含Song对象的列表。) 代码运行良好,但在do..while循环中,songtile也包含其他非音乐文件 我尝试检查文件扩展名,但它不起作用,再次使用调试器后,给定的文件名不包含文件扩展名 那么,如何确保它只从音乐文件中获取细节,而不从其他类型的文件中获取细节呢? (另外,我想获取音乐文件艺术家的姓名,但显然int-songArtistColumn=musi
列表中
(SongData
包含列表,它包含Song
对象的列表。)
代码运行良好,但在do..while
循环中,songtile
也包含其他非音乐文件
我尝试检查文件扩展名,但它不起作用,再次使用调试器后,给定的文件名不包含文件扩展名
那么,如何确保它只从音乐文件中获取细节,而不从其他类型的文件中获取细节呢?
(另外,我想获取音乐文件艺术家的姓名,但显然int-songArtistColumn=musicCursor.GetColumnIndex(“艺术家”);
似乎不起作用。)
最后,如何获得音乐文件的图像?(歌曲图像)。您可以尝试使用musicCursor.GetColumnNames()
查看该文件允许您使用的内容
如果你执行它,你可以得到。
musicCursor.GetColumnNames()
将以string[]
的形式返回结果,因此您可以使用List songInfo=new List(string[])代码>
您可能遇到的一个问题是null异常
,当您试图处理的数据的值为null时,就会发生这种情况。如果艺术家或其他值未知,则直接从文件中获取此值
我不知道图像文件存储在哪里,但如果它与音乐文件一起存储,则很可能存储在字节[]
中。因此,您需要将字节[]
转换为图像
public void PopulateSongList(Context context) {
SongData songData = new SongData();
Android.Net.Uri musicUri = Android.Provider.MediaStore.Audio.Media.ExternalContentUri;
//Used to query the media files.
ICursor musicCursor = context.ContentResolver.Query(musicUri, null, null, null, null);
if (musicCursor != null && musicCursor.MoveToFirst())
{
int songID = 0;
//get columns.
int songTitleColumn = musicCursor.GetColumnIndex("title");
int songArtistColumn = musicCursor.GetColumnIndex("artist");
//add songs to list
do
{
String songTitle = musicCursor.GetString(songTitleColumn);
//Tried, but file name does not contain file extension.
if (songTitle.ToLower().Contains(".mp4") || songTitle.ToLower().Contains(".m4a"))
{
String songArtist = musicCursor.GetString(songArtistColumn);
songData.AddNewSong(new Song(++songID, songTitle, songArtist, null));
}
}
while (musicCursor.MoveToNext());
}
}