Я столкнулся с препятствием при интеграции музыки в свое приложение для 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 Music «Сохранить на устройстве»). В частности, следующий код не воспроизводит указанную выше песню:
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource(dataPath);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (Exception e) {}
На самом деле, я просканировал устройство и нигде не смог найти файлы (хотя я подтвердил, что они локальные, полностью отключив сеть — как на Galaxy Nexus, так и на Galaxy S3).
Подход 2. Вызов Google Play Музыки или другого проигрывателя с помощью намерения
Согласно этой публикации, вы можете просто вызвать проигрыватель с помощью намерений, например :
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 указывает, что музыкальное приложение и его намерения не являются частью общедоступного API Android SDK и могут быть изменены без предупреждения.
Основная функциональность, которую я пытаюсь реализовать, существует в iOS благодаря тесной интеграции с iTunes. Я думаю, что Google захочет добиться такой же интеграции, поскольку это может означать продажу гораздо большего количества музыки в магазине Play.
Вкратце: можно ли позволить пользователям просматривать и воспроизводить песни, к которым у них уже есть доступ на Android? Как лучше всего это сделать с помощью Google Play Music или любого другого приложения? Спасибо.