我正在創建一個音樂播放器應用程式,我希望能夠在啟動時自動掃描用戶設備的音頻檔案,然后創建歌曲、專輯和藝術家的資料庫(然后可以在單擊時顯示和播放)。
到目前為止,我已經看了一些指南和類似的問題,并基于這些,我想出了這個代碼:
string[] columns = {
MediaStore.Audio.Media.InterfaceConsts.IsMusic,
MediaStore.Audio.Media.InterfaceConsts.RelativePath,
MediaStore.Audio.Media.InterfaceConsts.Title,
};
ICursor cursor = context?.ContentResolver?.Query(MediaStore.Audio.Media.ExternalContentUri, columns, null, null, null);
if (cursor is null)
{
return;
}
while (cursor.MoveToNext())
{
if (!Boolean.Parse(cursor.GetString(0)))
{
continue;
}
string trackPath = cursor.GetString(1);
string trackTitle = cursor.GetString(2);
}
cursor.Close();
這里的想法是只查詢我需要的資料(歌曲檔案路徑、標題、專輯、藝術家等)并將它們存盤為我自己的資料結構以提高可讀性(并從我的處理 UI 的類中訪問它們)。
但是,它似乎不起作用,我不明白為什么。作為參考,我正在 Xamarin Android 模擬器(API 版本 29)上對其進行測驗,并且在虛擬設備的“下載”檔案夾中有一些 .mp3 檔案。
從一些日志記錄中,我發現cursor它不是null,但它不包含任何要迭代的資料。該應用程式具有所需的所有權限(讀/寫外部存盤、訪問媒體位置等),因此它應該能夠讀取檔案。這MediaStore.Audio.Media.ExternalContentUri是一個潛在的罪魁禍首,但我不知道有任何其他方法可以獲取URI存盤在設備上的檔案。
我究竟做錯了什么?任何幫助,將不勝感激。謝謝。
uj5u.com熱心網友回復:
修復了這個問題。事實證明,即使InterfaceConsts.Data被標記為過時,它仍然按預期作業,并將為您提供媒體檔案的絕對路徑。所以使用與問題相同的代碼:
string[] columns = {
MediaStore.Audio.Media.InterfaceConsts.IsMusic,
MediaStore.Audio.Media.InterfaceConsts.Data,
MediaStore.Audio.Media.InterfaceConsts.Title,
};
ICursor cursor = context?.ContentResolver?.Query(MediaStore.Audio.Media.ExternalContentUri, columns, null, null, null);
if (cursor is null)
{
return;
}
while (cursor.MoveToNext())
{
if (!Boolean.Parse(cursor.GetString(0)))
{
continue;
}
string trackPath = cursor.GetString(1);
string trackTitle = cursor.GetString(2);
}
cursor.Close();
那應該作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/313157.html
上一篇:我在構建程序中收到錯誤“無效的專案IDfirebaseappcheckinterop-16.0.0-beta01”
下一篇:在嵌入式瀏覽器棄用中登錄
