音楽を Android アプリに統合する際に問題が発生しています。目標は、ユーザーが Google Play Music (または Winamp、Poweramp、doubleTwist などの他のプレーヤー) を介して、既にアクセスしている曲を表示および再生できるようにすることです。
これまでにいくつかのアプローチを試しましたが、それぞれに問題があります。
アプローチ #1: ContentResolver クエリを使用して Google Play ミュージックからプレイリストと曲を取得し、MediaPlayer を使用して再生します
まず、プレイ リストにカーソルを置きます。
String[] proj = { MediaStore.Audio.Playlists.NAME,
MediaStore.Audio.Playlists._ID };
Uri playlistUri = Uri.parse("content://com.google.android.music.MusicContent/playlists");
Cursor playlistCursor = getContentResolver().query(playlistUri, proj, null, null, null);
次に、繰り返して各プレイリストの曲を取得し、次のように読み取ります。
String[] proj2 = { MediaStore.Audio.Playlists.Members.TITLE,
MediaStore.Audio.Playlists.Members._ID };
String playListRef = "content://com.google.android.music.MusicContent/playlists/" + playListId + "/members";
Uri songUri = Uri.parse(playListRef);
Cursor songCursor = getContentResolver().query(songUri, proj2, null, null, null);
これはプレイリストと曲を取得するために機能しますが、実際にそれらを再生することはできません (Google Play ミュージックに「デバイスに保存する」ように指示しても)。具体的には、次のコードは、上記のように見つかった特定の曲を再生しません。
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource(dataPath);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (Exception e) {}
実際、デバイスをスキャンしましたが、どこにもファイルを見つけることができませんでした (Galaxy Nexus と Galaxy S3 の両方で、ネットワークを完全に無効にすることでファイルがローカルであることを確認しましたが)。
アプローチ #2: Intent を使用して Google Play Music または他のプレーヤーを呼び出す
この投稿によると、次のようにインテントを使用してプレーヤーを簡単に呼び出すことができます。
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
File file = new File(YOUR_SONG_URI);
intent.setDataAndType(Uri.fromFile(file), "audio/*");
startActivity(intent);
しかし、このアプローチでは、再生する特定の曲を渡したり、曲の再生が終了したときに通知を受け取ったりするなど、あらゆる種類の制御が可能になるとは思いません。さらに、@CommonWares は、音楽アプリとそのインテントは Android SDK のパブリック API の一部ではなく、警告なしに変更される可能性があると指摘しています。
私が達成しようとしている基本的な機能は、iTunes との緊密な統合のおかげで、iOS に存在します。Playストアでより多くの音楽を販売することを意味する可能性があるため、Googleは同じ種類の統合を実現したいと考えていると思います.
要約: Android で既にアクセスしている曲をユーザーが見たり再生したりできるようにすることはできますか? Google Play ミュージックやその他のアプリでこれを行う最善の方法は何ですか? ありがとう。