首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止使用onAudioFocusChange的其他音乐应用程序

停止使用onAudioFocusChange的其他音乐应用程序
EN

Stack Overflow用户
提问于 2018-01-18 19:45:47
回答 2查看 676关注 0票数 1

我正在尝试创建一个在后台播放音乐的无线电应用程序,但是当我的应用程序和其他音乐应用程序同时播放音乐时,我遇到了其他音乐应用程序的问题,因为我试图使用AudioFocus来解决这个问题,我下面的代码是工作的,但在一个方向上。

问题

  • (音乐应用,比如谷歌播放音乐)当我第一次运行我的应用程序时,谷歌音乐停止播放音乐,我的应用程序播放音乐( Works )
  • 我的应用程序在后台播放音乐,当我打开Google音乐时,我的应用程序停止播放音乐,Google播放音乐(Works)
  • 暂停播放Google音乐,允许我的应用程序恢复/重新开始播放音乐(不工作)
  • 暂停播放我的应用程序中的音乐,允许谷歌再次播放音乐(不工作)

我的代码:

代码语言:javascript
复制
 private AudioManager mAudioManager;
    boolean mAudioFocusGranted = false;
    private AudioManager.OnAudioFocusChangeListener mOnAudioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {

        @Override
        public void onAudioFocusChange(int focusChange) {
            switch (focusChange) {
                case AudioManager.AUDIOFOCUS_GAIN:
                    mediaPlayer.start();
                    MusicButton.setChecked(false);
                    break;
                case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT:
                    mediaPlayer.start();
                    MusicButton.setChecked(false);
                    break;
                case AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:
                    mediaPlayer.start();
                    MusicButton.setChecked(false);
                    break;
                case AudioManager.AUDIOFOCUS_LOSS:
                    mediaPlayer.pause();
                    MusicButton.setChecked(true);
                    break;
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                    mediaPlayer.pause();
                    MusicButton.setChecked(true);
                    break;
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
                    mediaPlayer.setVolume(0.2f,0.2f);
                    break;
            }
        }
    };
SuppressLint({"CommitPrefEdits", "Assert"})
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MusicButton = findViewById(R.id.toggleButton);
        mAudioManager = (AudioManager)getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
    if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
            mAudioFocusGranted = true;
        } else if (result == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
            MusicButton.setChecked(true);
            mediaPlayer.pause();
        }
    }

请有人帮我解决这个问题*对不起我的英语

EN

回答 2

Stack Overflow用户

发布于 2018-01-18 21:38:15

这是我上述评论的摘要,如果你想接受它作为回答:

在一个应用程序中暂停音乐/音频通常不会触发焦点更改,从而导致另一个应用程序恢复。应用程序必须调用abandonAudioFocus()或abandonAudioFocusRequest(audioFocusRequest),这通常是为了响应stop()而不是audioFocusRequest()。

点击“谷歌音乐”中的停顿不会引起你的注意力增加。你什么也做不了。如果用户暂停谷歌音乐并想恢复你的应用程序,他们将手动点击你的应用程序,或通过你的媒体通知,如果它仍然可见。

如果您想让Google在您暂停后恢复,您将不得不放弃焦点,在暂停abandonAudioFocus之后调用MediaPlayer。尽管如此,用户并不一定期望从暂停按钮中得到这样的行为。

票数 0
EN

Stack Overflow用户

发布于 2018-01-18 23:52:39

用@Robert的回答和AndroidAudioFocus的演示,我终于解决了我的问题

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

https://stackoverflow.com/questions/48329178

复制
相关文章

相似问题

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