当我播放‘声音云’或‘萨文’音乐播放应用程序,我开始自己的应用程序,音乐在萨文或声音云仍然在播放背景。需要一种方法来阻止它使用代码。怎么做?
我试过这个-
AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
String SERVICECMD = "com.android.music.musicservicecommand";
String CMDNAME = "command";
String CMDSTOP = "stop";
if(mAudioManager.isMusicActive()) {
Intent i = new Intent(SERVICECMD);
i.putExtra(CMDNAME , CMDSTOP );
HomeActivity.this.sendBroadcast(i);
}
但是,如果Android的默认音乐播放器是在后台播放,而不是像Saavn和Soundcloud这样的第三方应用程序的话,它才能在停止音乐方面发挥作用。
发布于 2016-11-28 21:36:04
我在此找到的一个可能的解决方案是使用AudioManager.requestAudioFocus(.)函数
(AudioManager)getSystemService(Context.AUDIO_SERVICE);= AudioManager am
代码示例:
int result = am.requestAudioFocus(focusChangeListener, //Request audio focus for playback
AudioManager.STREAM_MUSIC, //Use the music stream.
AudioManager.AUDIOFOCUS_GAIN); //Request permanent focus.
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
// other app had stopped playing song now , so u can do u stuff now .
}
音频焦点依次分配给每个请求它的应用程序。这意味着,如果另一个应用程序请求音频焦点,您的应用程序将丢失它。当AudioFocus上发生更改时,通过onAudioFocusChange事件侦听器通知应用程序。此侦听器是requestAudioFocus函数中的第一个参数。
这个侦听器应该如下所示:
private OnAudioFocusChangeListener focusChangeListener = new OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
AudioManager am =(AudioManager)getSystemService(Context.AUDIO_SERVICE);
switch (focusChange) {
case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK):
//Lower the volume while ducking (not sure what ducking means really)
break;
case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) :
//TODO: pause audio
break;
case (AudioManager.AUDIOFOCUS_LOSS) :
//TODO: pause audio
break;
case (AudioManager.AUDIOFOCUS_GAIN):
//TODO: Return the volume to normal and resume if paused.
break;
default: break; //empty on default
}
}
};
发布于 2016-11-23 06:56:06
我认为停止另一个应用程序的服务是不可能的,因为您可能不知道过程,只有当您知道应用程序的Pid时,才能停止应用程序的服务。
android.os.Process.killProcess(processIdKillService)
https://stackoverflow.com/questions/40757842
复制相似问题