在我的Android应用程序中,我正在使用MediaPlayer类播放不同的mp3文件。
用户正在使用默认音乐应用程序播放自己的音乐。
我想要:
- 暂停默认音乐应用程序的音乐。
- 开始从我的应用程序播放音乐。
- 当我的音乐播放完成后,我的应用将恢复用户的默认音乐。
我希望能够从我的应用程序暂停和恢复默认音乐播放器的音乐。
这是否可能?
在我的Android应用程序中,我正在使用MediaPlayer类播放不同的mp3文件。
用户正在使用默认音乐应用程序播放自己的音乐。
我想要:
我希望能够从我的应用程序暂停和恢复默认音乐播放器的音乐。
这是否可能?
以下代码将通过发送广播来暂停默认的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);
}
大家好,尝试使用以下代码,它对我有效:
// 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);
使用以下代码控制当前播放的音乐。
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);
}
实际上,这是我使用的所有音乐应用程序中唯一有效的代码。已验证过:
// 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";
它对我来说运行得非常好:
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);
call this function when it is needed :
private void checkAudioFocus() {
AudioManager mAudioManager = (AudioManager) getApplicationContext().getSystemService(AUDIO_SERVICE);
if(mAudioManager.isMusicActive())
{
int result = mAudioManager.requestAudioFocus(AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
}
}
你可以尝试这段代码,希望能对你有所帮助。
val audioManager = requireActivity().getSystemService(Context.AUDIO_SERVICE) as AudioManager val focusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN).run {
setAudioAttributes(AudioAttributes.Builder().run {
setUsage(AudioAttributes.USAGE_GAME)
setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
setOnAudioFocusChangeListener({ }, object : Handler() {})
build()
})
setAcceptsDelayedFocusGain(true)
build()
}
audioManager.requestAudioFocus(focusRequest)