首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用代码停止后台音乐播放器服务,如Soundcloud和Saavn

使用代码停止后台音乐播放器服务,如Soundcloud和Saavn
EN

Stack Overflow用户
提问于 2016-11-23 06:51:49
回答 2查看 1.3K关注 0票数 1

当我播放‘声音云’或‘萨文’音乐播放应用程序,我开始自己的应用程序,音乐在萨文或声音云仍然在播放背景。需要一种方法来阻止它使用代码。怎么做?

我试过这个-

代码语言:javascript
运行
复制
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这样的第三方应用程序的话,它才能在停止音乐方面发挥作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-28 21:36:04

我在此找到的一个可能的解决方案是使用AudioManager.requestAudioFocus(.)函数

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

代码示例:

代码语言:javascript
运行
复制
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函数中的第一个参数。

这个侦听器应该如下所示:

代码语言:javascript
运行
复制
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
        }
    }
};
票数 2
EN

Stack Overflow用户

发布于 2016-11-23 06:56:06

我认为停止另一个应用程序的服务是不可能的,因为您可能不知道过程,只有当您知道应用程序的Pid时,才能停止应用程序的服务。

android.os.Process.killProcess(processIdKillService)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40757842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档