Управление музыкальным плеером по умолчанию для Android или любого другого музыкального проигрывателя

Как управлять музыкальным плеером по умолчанию для Android или любого другого игрока? Контролируя, я имею в виду паузу, игру, следующий и т. Д. Нужно ли мне связывать услугу? Я попытался использовать IMediaPlaybackService но он не работает. Конечно, есть выход, так как я видел приложения на рынке Android, которые контролируют музыкальный плеер. Есть идеи?

Solutions Collecting From Web of "Управление музыкальным плеером по умолчанию для Android или любого другого музыкального проигрывателя"

 AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); if(mAudioManager.isMusicActive()) { Intent i = new Intent(SERVICECMD); i.putExtra(CMDNAME , CMDSTOP ); YourApplicationClass.this.sendBroadcast(i); } 

Вы можете получить аудиомастер, а затем отправить ему команды.

Это команды.

  public static final String CMDTOGGLEPAUSE = "togglepause"; public static final String CMDPAUSE = "pause"; public static final String CMDPREVIOUS = "previous"; public static final String CMDNEXT = "next"; public static final String SERVICECMD = "com.android.music.musicservicecommand"; public static final String CMDNAME = "command"; public static final String CMDSTOP = "stop"; 

Проблема с отправкой Intent для широковещательного приемника заключается в том, что пользователь должен открыть Music Player хотя бы один раз, также, он не работает для многих сторонних музыкальных плееров.

Приведенный ниже код работает на всех музыкальных проигрывателях.

 long eventtime = SystemClock.uptimeMillis(); Intent downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); KeyEvent downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE, 0); downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent); sendOrderedBroadcast(downIntent, null); Intent upIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); KeyEvent upEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE, 0); upIntent.putExtra(Intent.EXTRA_KEY_EVENT, upEvent); sendOrderedBroadcast(upIntent, null); /*NEXT*/ Intent downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); KeyEvent downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_NEXT, 0); downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent); sendOrderedBroadcast(downIntent, null); /*PREVIOUS*/ Intent downIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); KeyEvent downEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PREVIOUS, 0); downIntent.putExtra(Intent.EXTRA_KEY_EVENT, downEvent); sendOrderedBroadcast(downIntent, null); 

Я тестировал этот код на устройствах Sony, Htc и Samsung.

Этот код имитирует действие кнопки воспроизведения / паузы из громкой связи (наушники).

Если вы хотите управлять музыкальным проигрывателем (текущим воспроизведением), есть способ отправить к нему KeyEvents:

 if (mAudioManager == null) mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE); KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY); mAudioManager.dispatchMediaKeyEvent(event); 

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

Примечание: он должен иметь minSdk 19 или больше.

В Android 4.4 появился новый метод RemoteController, но это боль в заднице, и я не мог заставить его работать. Он также требует, чтобы вы направляли пользователя в глобальные параметры безопасности и позволяли вам получать доступ к всем своим уведомлениям !!! Я не уверен, что Google думает здесь.

В любом случае я выполнил все инструкции, но registerRemoteController() прежнему возвращает false поэтому я еще ничего не могу сделать (очевидно, Google никогда не слышал о кодах ошибок).

Учитывая, что метод user2572182, похоже, не работает на Android 4.4, кажется, это невозможно.

Изменить: я нашел пример приложения с помощью RemoteController на XDA всех мест (кто знал, что там есть полезный контент?). Он работает на моем телефоне, но вам все равно нужно сказать своим пользователям, чтобы они пошли и изменили некоторые неясные настройки безопасности, поэтому они не идеальны:

http://forum.xda-developers.com/showthread.php?p=51535568

Изменить 2: Google изменил это снова на Android «L». Думаю, они поняли, что RemoteControlClient слишком сложный.

Похоже, что упомянутые методы KeyEvent не работают для меня в последнем SDK. Использование метода dispatchMediaKeyEvent () AudioManager с определенным KeyEvent работало для меня.

Смотрите: здесь

Пример кода:

 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); 

Если вы хотите возобновить воспроизведение музыки, удалите if-loop из ответа @Ahmad Ekri

Но очень полезный ответ действительно!