Можно ли пропустить трек из приложения Android? - PullRequest
3 голосов
/ 17 апреля 2010

Я планирую создать приложение для Android 2.1, которое каждую минуту меняет песню (через то, что, я надеюсь, существует в Android, «далее») для приложения, использующего аудиоустройство atm.

Так что если я Spotify уже работает в фоновом режиме, играет музыка, могу ли я с помощью своей программы перейти на следующий трек?

Дайте мне знать, если мне что-то неясно.Заранее спасибо!

Ответы [ 5 ]

19 голосов
/ 09 января 2012

Я знаю, что это немного старый вопрос, но мне потребовалось некоторое время на поиск чего-то другого, кроме того, что здесь упоминается.

Существует обходной путь - действие кнопки медиатрансляции. Есть одна загвоздка - получатель может распознать, была ли трансляция из системы или из другого приложения, поэтому он может игнорировать несистемные трансляции.

Intent i = new Intent(Intent.ACTION_MEDIA_BUTTON);
synchronized (this) {
            i.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_NEXT));
            sendOrderedBroadcast(i, null);

            i.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_NEXT));
            sendOrderedBroadcast(i, null);
 }
1 голос
/ 08 августа 2017

Только что опубликовал соответствующий ответ здесь

Использование метода dispatchMediaKeyEvent () в AudioManager с определенным KeyEvent помогло мне использовать последний SDK.

1 голос
/ 17 апреля 2010

Универсального API для передачи аудиоданных для музыкальных приложений не существует, поэтому вам необходимо выяснить, являются ли музыкальные приложения, на которые вы нацелены, публично, связывают сервисные привязки или намерения. Если нет, вы не сможете это сделать.

0 голосов
/ 06 мая 2019

Похоже, что можно использовать AudioManager для ввода медиа-ключей.

Вот фрагмент из другого вопроса

this.mAudioManager = (AudioManager) this.context.getSystemService(Context.AUDIO_SERVICE);

long eventtime = SystemClock.uptimeMillis();

KeyEvent downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_NEXT, 0);
mAudioManager.dispatchMediaKeyEvent(downEvent);

KeyEvent upEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_NEXT, 0);
mAudioManager.dispatchMediaKeyEvent(upEvent);

Таким же образом вы можете ввести кнопку PlayPause и некоторые другие. Я протестировал его в фоновом сервисе, контролирующем Youtube, и он работал на Android 6

0 голосов
/ 17 апреля 2010

Виджет домашнего экрана системной музыки отправляет это намерение для встроенного музыкального проигрывателя:

    final ComponentName serviceName = new ComponentName(context, 
        MediaPlaybackService.class);
    intent = new Intent(MediaPlaybackService.NEXT_ACTION);
    intent.setComponent(serviceName);
    pendingIntent = PendingIntent.getService(context,
            0 /* no requestCode */, intent, 0 /* no flags */);
    views.setOnClickPendingIntent(R.id.control_next, pendingIntent);

Но похоже, что для реализации внешних пакетов в самом музыкальном приложении может потребоваться некоторая хакерская работа, поскольку MediaPlaybackService принимает только явные Intents и недоступен извне. Эта тема , кажется, указывает на то, что это возможно с небольшим количеством взлома, хотя.

Но даже тогда, как сказал Роман, не каждый музыкальный проигрыватель будет уважать это намерение. Вам придется самим проверить с помощью Spotify / Pandora / Last.fm и выяснить, есть ли у них какие-либо намерения связать подобное.

...