Как получить Spotify и другие Android musi c приложения для поиска и игры с намерением? - PullRequest
3 голосов
/ 13 февраля 2020

Я хотел бы создать намерение MEDIA_PLAY_FROM_SEARCH (или другое), которое будет искать и воспроизводить песню в любом крупном приложении Android musi c. Я ожидал, что следующая командная строка будет работать с несколькими приложениями:

adb shell am start -a "android.media.action.MEDIA_PLAY_FROM_SEARCH" -e android.intent.extra.focus "vnd.android.cursor.item/*" -e query "yellow\ submarine\ by\ the\ beatles" -f 268435456

Это соответствует коду:

Intent intent = new Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH);
intent.putExtra(MediaStore.EXTRA_MEDIA_FOCUS, "vnd.android.cursor.item/*");
intent.putExtra(SearchManager.QUERY, "yellow submarine by the beatles");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

Это запускает программу выбора в моем Pixel 2 со списком различных приложений, которые могут обрабатывать запрос. Если я выберу Google Play Musi c, будет воспроизведена Желтая подводная лодка. Если я выбираю Spotify, он выполняет поиск, но не проигрывает, даже если у меня есть подписка Spotify Premium. YouTube Musi c также выполняет только поиск.

Я специально не указываю, является ли запрос исполнителем или песней (или и тем, и другим, как в этом примере), поскольку я хочу оставить определение на musi c app.

Поведение будет таким же (в Google Play Musi c и Spotify), если я уберу MediaStore.EXTRA_MEDIA_FOCUS extra и флаг:

$ adb shell am start -a "android.media.action.MEDIA_PLAY_FROM_SEARCH" -e query "yellow\ submarine\ by\ the\ beatles"

Что мне нужно, чтобы заставить его воспроизводить песни в любом крупном приложении musi c (т. е. поддерживаемом Google Assistant)?

1 Ответ

0 голосов
/ 21 февраля 2020

Я подозреваю, что это связано с тем, как указанные c приложения обрабатывают фокус. Не могли бы вы попробовать следующее?

adb shell am start -a "android.media.action.MEDIA_PLAY_FROM_SEARCH" -e android.intent.extra.focus "vnd.android.cursor.item/playlist" -e query "yellow\ submarine\ by\ the\ beatles" -f 268435456

и если это не удалось ...

adb shell am start -a "android.media.action.MEDIA_PLAY_FROM_SEARCH" -e android.intent.extra.focus "vnd.android.cursor.item/audio" -e query "yellow\ submarine\ by\ the\ beatles" -f 268435456

Использование "vnd. android .cursor.item / *" проигрывать музыку c на основе разумного выбора, но он не структурирован, и приложения должны по возможности использовать более специфичные c режимы поиска, например, список воспроизведения / аудио

...