3

デバイスにプリインストールされている「ミュージック」アプリ内から3曲のプレイリストを作成し、自分のアプリ内でMediaStore.Audio.Playlists.EXTERNAL_CONTENT_URIを正常に照会しました(デバッグで名前を確認しました)正しいプレイリストであることを確認するため)、そこから曲の再生を開始する必要がある場合に備えて、そのIDを保存しました。

後でそれらの曲の1つを再生するようになると、プレイリストからの曲数は正しいですが、プレイリストに入れたトラックとは異なるトラックが再生されます。これが、プレイリストからトラックを取り出すコードのブロックです。

注:これはPhoneGapプラグイン内にあるため、「this.ctx」がアクティビティです。私のテストデバイスは、Android 2.2を実行しているHTCDesireです(関連性がある場合)。

Cursor cursor = null;
Uri uri = null;

Log.d(TAG, "Selecting random song from playlist");
uri = Playlists.Members.getContentUri("external", this.currentPlaylistId);

if(uri == null) {
    Log.e(TAG, "Encountered null Playlist Uri");
}

cursor = this.ctx.managedQuery(uri, new String[]{Playlists.Members._ID}, null, null, null);

if(cursor != null && cursor.getCount() > 0) {
    this.numSongs = cursor.getCount();
    Log.d(TAG, "numSongs: "+this.numSongs); // Correctly outputs 3

    int randomNum = (int)(Math.random() * this.numSongs);
    if(cursor.moveToPosition(randomNum)) {
        int idColumn = cursor.getColumnIndex(Media._ID); // This doesn't seem to be giving me a track from the playlist
        this.currentSongId = cursor.getLong(idColumn);
        try {
            JSONObject song = this.getSongInfo();
            play(); // This plays whatever song id is in "this.currentSongId"
            result = new PluginResult(Status.OK, song);
        } catch (Exception e) {
            result = new PluginResult(Status.ERROR);
        }
    }
}
4

1 に答える 1

2

Playlists.Members._IDプレイリストの並べ替えに使用できるプレイリスト内のIDです

Playlists.Members.AUDIO_IDオーディオファイルのIDです。

したがって、コードは次のようになります。

cursor = this.ctx.query(uri, new String[]{Playlists.Members.AUDIO_ID}, null, null, null);

if(cursor != null && cursor.getCount() > 0) {
    this.numSongs = cursor.getCount();
    Log.d(TAG, "numSongs: "+this.numSongs); // Correctly outputs 3

    int randomNum = (int)(Math.random() * this.numSongs);
    if(cursor.moveToPosition(randomNum)) {
        int idColumn = cursor.getColumnIndex(Playlists.Members.AUDIO_ID); // This doesn't seem to be giving me a track from the playlist
        // or just cursor.getLong(0) since it's the first and only column you request
        this.currentSongId = cursor.getLong(idColumn);
        try {
            JSONObject song = this.getSongInfo();
            play(); // This plays whatever song id is in "this.currentSongId"
            result = new PluginResult(Status.OK, song);
        } catch (Exception e) {
            result = new PluginResult(Status.ERROR);
        }
    }
}
于 2012-09-10T18:46:37.980 に答える