1

カーソルを設定しましたが、実際に検索するのにまだ苦労しています。トラック名を検索するにはどうすればよいですか? ID を取得して mediaplayer に渡すにはどうすればよいですか? 私はさまざまなことを試みましたが、成功しませんでした。

基本的に、メディアストアで特定の文字列 (この場合は songToPlay という文字列) を検索し、結果を取得し、最適な一致の ID を取得し、それをメディア プレーヤー サービスに渡してバックグラウンドで再生する方法を知りたいと考えています。私があなたに尋ねている唯一のことは、IDを取得する方法です.

これは私が使用しているコードです:

Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String[] songToPlay = value.split("play song");
    String[] searchWords = songToPlay[1].split(" ");
                String [] keywords = null;
                StringBuilder where = new StringBuilder();
                where.append(MediaStore.Audio.Media.TITLE + " != ''");
    String selection = where.toString();
                    String[] projection = {
                            BaseColumns._ID,   
                            MediaStore.Audio.Media.MIME_TYPE, 
                            MediaStore.Audio.Artists.ARTIST,
                            MediaStore.Audio.Albums.ALBUM,
                            MediaStore.Audio.Media.TITLE
                    };
for (int i = 0; i < searchWords.length; i++) {
                        keywords[i] = '%' + MediaStore.Audio.keyFor(searchWords[i]) + '%';
                    }

                Cursor cursor = this.managedQuery(uri, projection, selection, keywords, MediaStore.Audio.Media.TITLE);              
                if (cursor.moveToFirst()) {
                    do{
                        test.setText(cursor.getString(cursor
                                .getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)));
                    }while(cursor.moveToNext());
                }

私は非常に混乱しており、このコードのほとんどはインターネットからのものです。私はこれを2日間試みているので、ここで質問しています。私は自分で何時間も試しました。

編集: 現在のコード。音楽 ID など、カーソルからその曲を再生するために必要なものを見つけるにはどうすればよいですか?

Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
            String songToPlay = value.replaceAll("play song", "").trim();
            int music_column_index;
            String[] projection = {
                    MediaStore.Audio.Media._ID,   
                    MediaStore.Audio.Artists.ARTIST,
                    MediaStore.Audio.Albums.ALBUM,
                    MediaStore.Audio.Media.TITLE
            };


            @SuppressWarnings("deprecation")
            Cursor cursor = this.managedQuery(uri, 
                    null, 
                    MediaStore.Audio.Media.TITLE + "=?", 
                    new String[]{songToPlay}, 
                    MediaStore.Audio.Media.TITLE + " ASC"); 
4

1 に答える 1

2

MediaStoreこれにより、文字列の値と等しいタイトルを持つすべての曲が検索されsongToPlayます。

Cursor cursor = getContentResolver().query(
    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
    null, 
    MediaStore.Audio.Media.TITLE + "=?", 
    new String[]{songToPlay}, 
    MediaStore.Audio.Media.TITLE + " ASC");

もちろん、カーソルをクエリして、結果の ID (およびその他の列) を取得できます。

while (cursor.moveToNext()) {
    String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
    long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media._ID));
    // Whatever else you need
}

ただし、これには完全一致が必要ですLIKE。演算子を使用して、より曖昧な一致にすることもできます。

于 2013-07-31T08:27:25.677 に答える