控制Android或任何其他音乐播放器的默认音乐播放器

Nad*_*ddy 20 android android-service

如何控制Android或任何其他播放器的默认音乐播放器?通过控制我的意思是暂停,播放,下一个等等.我必须绑定服务吗?我试图使用IMediaPlaybackService它,但它不起作用.因为我在Android市场上看到了控制音乐播放器的应用程序,所以肯定有一条出路.任何的想法?

Ahm*_*kri 22

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

if(mAudioManager.isMusicActive()) {
    Intent i = new Intent(SERVICECMD);
    i.putExtra(CMDNAME , CMDSTOP );
    YourApplicationClass.this.sendBroadcast(i);
}
Run Code Online (Sandbox Code Playgroud)

您可以通过获取audiomanager然后向其发送命令.

这些是命令.

 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";
Run Code Online (Sandbox Code Playgroud)

  • 你能告诉我如何找到所有音乐播放器的SERVICECMD吗? (2认同)

Vir*_*ank 10

发送Intent广播接收器的问题在于,用户必须至少打开音乐播放器一次,它也不适用于许多第三方音乐播放器.

下面给出的代码适用于所有音乐播放器.

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);
Run Code Online (Sandbox Code Playgroud)

我已在Sony,Htc和Samsung设备上测试过此代码.

此代码模仿免提(耳机)的播放/暂停按钮操作.


小智 5

如果要控制音乐播放器(当前正在播放的音乐播放器),可以使用一种方法向其发送KeyEvent:

if (mAudioManager == null) mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE);

KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_PLAY);
mAudioManager.dispatchMediaKeyEvent(event);
Run Code Online (Sandbox Code Playgroud)

这是一种比较安全的方法,因为通常广播keyEvent可能导致一次播放多个玩家。

注意:它必须具有minSdk 19或更高。