Android-приложение для приостановки / возобновления воспроизведения музыки из другого музыкального проигрывателя - PullRequest
9 голосов
/ 26 февраля 2011

В моем приложении для Android я играю разные mp3-файлы с использованием класса MediaPlayer.

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

Я хочу:

  1. Приостановка воспроизведения музыкального приложения по умолчанию.
  2. Начните воспроизведение музыки из моего приложения.
  3. Когда моя музыка закончится, мое приложение возобновит воспроизведение музыки по умолчанию для пользователя.

Я хочу приостановить и возобновитьмузыка музыкального проигрывателя по умолчанию из моего приложения.

Возможно ли это сделать?

Ответы [ 6 ]

8 голосов
/ 17 октября 2011

Следующий код приостановит MediaPlayer по умолчанию, отправив трансляцию:

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

if (mAudioManager.isMusicActive()) {

    Intent i = new Intent("com.android.music.musicservicecommand");

    i.putExtra("command", "pause");
    YourApplicationClass.this.sendBroadcast(i);
} 
3 голосов
/ 25 февраля 2015
// pause
Intent i = new Intent("com.android.music.musicservicecommand");
i.putExtra("command", "pause");
sendBroadcast(i);

// play
Intent i = new Intent("com.android.music.musicservicecommand");
i.putExtra("command", "play");
sendBroadcast(i);

// next
Intent i = new Intent("com.android.music.musicservicecommand");
i.putExtra("command", "next");
sendBroadcast(i);

// previous
Intent i = new Intent("com.android.music.musicservicecommand");
i.putExtra("command", "previous");
sendBroadcast(i);

Дополнительная информация о доступных командах:

public static final String SERVICECMD = "com.android.music.musicservicecommand";
public static final String CMDNAME = "command";
public static final String CMDTOGGLEPAUSE = "togglepause";
public static final String CMDSTOP = "stop";
public static final String CMDPAUSE = "pause";
public static final String CMDPLAY = "play";
public static final String CMDPREVIOUS = "previous";
public static final String CMDNEXT = "next";
2 голосов
/ 28 июля 2017

Для управления воспроизводимой в данный момент музыкой используйте этот код.

    AudioManager mAudioManager = (AudioManager) c.getSystemService(Context.AUDIO_SERVICE);

if(mode == Config.MUSIC_NEXT) {
                KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_NEXT);
                mAudioManager.dispatchMediaKeyEvent(event);
            }else if(mode == Config.MUSIC_PLAY){
                KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY);
                mAudioManager.dispatchMediaKeyEvent(event);
            }
            else if(mode == Config.MUSIC_PREV){
                KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PREVIOUS);
                mAudioManager.dispatchMediaKeyEvent(event);
            }

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

  • Google play music.
  • Apple Music
  • Музыкальное приложение OnePlus
1 голос
/ 03 января 2019

Существует также другое решение, которое может только приостановить воспроизведение музыкального проигрывателя:

  1. реализует AudioManager.OnAudioFocusChangeListener
  2. методы переопределения, которые предлагаются ide.
  3. вызовите эту функцию, когда это необходимо:

    private void checkAudioFocus() {
        AudioManager mAudioManager = (AudioManager) getApplicationContext().getSystemService(AUDIO_SERVICE);  
        if(mAudioManager.isMusicActive())
        {
            int result = mAudioManager.requestAudioFocus(AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
        }
    }
    
1 голос
/ 01 октября 2018

Это работает очень хорошо для меня:

    KeyEvent ke = new KeyEvent(KeyEvent.ACTION_DOWN, 
    KeyEvent.KEYCODE_MEDIA_PAUSE);
    Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
    intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);

    // construct a PendingIntent for the media button and unregister it
    Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
    PendingIntent pi = PendingIntent.getBroadcast(context,
            0/*requestCode, ignored*/, mediaButtonIntent, 0/*flags*/);
    intent.putExtra(Intent.EXTRA_KEY_EVENT, ke);
    sendKeyEvent(pi,context, intent);

    ke = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_MEDIA_PAUSE);
    intent.putExtra(Intent.EXTRA_KEY_EVENT, ke);
    sendKeyEvent(pi, context, intent);
1 голос
/ 11 июня 2018

ребята, попробуйте следовать коду, у меня это сработало:

// stop music player
AudioManager am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
am.requestAudioFocus(null,AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);

//resume music player

am.abandonAudioFocus(null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...