7

音楽を再生する小さなアプリを書いています。私のターゲットは Android API レベル 7 以上です。

アプリは、「ポップ」、「ロック」、「ヒルビリー」など、ユーザーが設定を介して選択した特定のジャンルのセットでタグ付けされた音楽のみを一覧表示して再生する必要があります。

現在、選択したジャンルでタグ付けされたトラックを含むすべてのアルバム ID とアルバム名を効率的に検索する方法を見つけようとしています。

これは SQL では簡単です。電話は、メディア メタ データを sqlite データベースに保存します。私は電話の内部メモリでそれを見つけ、adb経由でコピーし、いくつかのsqliteクエリを試しました. 結果のクエリは、一連の結合を含む SQL ワンライナーであり、正常に機能します。

これは、少なくとも API レベル 7 以上では、Android SDK を使用する Java ではより困難なようです。MediaStore で managedQuery を使用して、同じ基礎となるデータベースでいくつかの限定された SQL 構文を実行できますが、正しく理解していれば、この API を使用するときに JOIN も DISTINCT もありません。

また、これを見落としているかもしれませんが、MediaStore では1 つのジャンルのすべてのトラックを検索できますが、1 つのクエリで複数のジャンルのすべてのトラックを検索することはできません。

そのため、これはすべて Java で少し手動で行う必要があります。プログラムは、ジャンルごとにいくつかの managedQuery() 呼び出しを実行する必要があり、プログラムは結果を結合して、sqlite の外部 (この作業が属する場所) でそれらを Java で区別する必要があります。

これは本当にそれが行われなければならない方法ですか?生のクエリを sqlite データベース ファイルに送信する方法はありませんか?

ありがとう!

4

1 に答える 1

2

いいえ、データベースの基礎となる構造に直接アクセスすることはできません。実際、データベースの実際の構造を知る方法はなく、プラットフォームのバージョン間で変更されています。実行できる唯一の直接クエリは、コンテンツ プロバイダーの MediaStore プロトコルを通じて提供されるものです。

于 2012-08-01T01:39:27.357 に答える