2012-02-29 17 views
6

我正在寫一個小應用來播放音樂。我的目標是Android API級別7及以上。是否可以在Android的媒體meta sqlite數據庫上進行原始查詢?

該應用程序應該只列出並播放用用戶通過偏好選擇的一組特定類型標記的音樂,例如, 「流行音樂」,「搖滾」,「山比利」。

現在我試圖找到一種有效的方式來查找包含所選流派標記的曲目的所有專輯ID和專輯名稱。

這在SQL中很簡單。手機將媒體元數據存儲在sqlite數據庫中。我在手機的內存中找到它,通過adb複製它,並嘗試了一些sqlite查詢。由此產生的查詢是一個具有連接鏈的SQL單行程,並且工作正常。

這對於使用Android SDK的Java來說似乎更困難,至少在API級別爲7以上的情況下。我可以在MediaStore上使用managedQuery在相同的底層數據庫上執行一些有限的SQL語法,但是如果我理解正確,那麼在使用此API時不會有JOIN和DISTINCT。

此外,我可能忽略了這一點,但MediaStore允許我搜索一個類型的所有曲目,但不適用於單個查詢中多個流派的所有曲目。

所以這一切都得到了一些在java手動工作。該程序現在必須爲每個流派執行一些managedQuery()調用,並且程序必須加入結果並使它們與sqlite(本作品所屬的場所)之外的java區分開來。

這是真的該如何做?有沒有辦法只是將原始查詢發送到sqlite數據庫文件?

謝謝!

+0

我已經使用db.rawQuery()之前爲我自己在Android的SQLite數據庫,是否有可能將它應用到元數據庫? http://www.codeproject.com/Articles/119293/Using-SQLite-Database-with-Android – mszaro 2012-07-09 18:06:40

回答

2

不,您不能直接訪問數據庫的底層結構 - 事實上,您無法知道數據庫的實際結構,它在平臺版本中已更改。您可以執行的唯一直接查詢是通過內容提供者的MediaStore協議提供的查詢。

相關問題