0

我需要一个简单的演示,我想在其中检查音乐是否在后台运行?并且也不影响在后台运行的音乐

我从这里阅读 学习链接 并制作了演示代码

演示代码在这里,但这并没有给我 O/P:

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

AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN);
    int result = am.requestAudioFocus(new OnAudioFocusChangeListener() {

        @Override
        public void onAudioFocusChange(int focusChange) {
            if(//background Music is running )
            {}
            else{
                 //background Music is not running
            }
        }
    },AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);

我想要什么需要添加什么。请帮忙把这东西弄到东边。

4

1 回答 1

1

您发布的当前代码似乎是您实际上是在请求使用 STREAM_MUSIC 流而不是检测它。我相信你可能有两种选择。

我没有尝试过这种方法,但听起来AudioManager.isMusicActive()可能对你有用。

从这个页面,它说

检查是否有任何音乐处于活动状态。

如果任何音乐曲目处于活动状态,则返回 true。

您的另一个选择是使用AudioManager.OnAudioFocusChangeListener。您必须首先创建此侦听器,然后将其注册以检测更改。这意味着在另一个应用开始使用流之前,您的应用需要在后台运行。

创建一个监听器(来自http://developer.android.com/training/managing-audio/audio-focus.html的示例)

OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {
    public void onAudioFocusChange(int focusChange) {
        if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT) {
            // another app took the stream temporarily
        } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
            // another app let go of the stream
        } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
            // another app took full control of the stream
        }
    }
};

现在您可以注册监听器并检测更改

int result = am.requestAudioFocus(afChangeListener,
                                 // Use the music stream.
                                 AudioManager.STREAM_MUSIC,
                                 // Request permanent focus.
                                 AudioManager.AUDIOFOCUS_GAIN);

if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
    // You successfully took control of the stream and can detect any future changes
}

这不是一个非常优雅的解决方案,因为您很可能会从其他应用程序中删除音乐流。这取决于您的用例,但它可能是一个起点。

于 2013-09-18T15:27:21.580 回答