这个问题在这里已有答案:
我需要一个简单的演示,其中我想检查音乐是否在后台运行?并且也不会影响在Background中运行的音乐
我从这里读了study Link并制作了一个演示代码
演示代码在这里,但这不是给我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);
需要添加什么才能满足我的需求。请帮助东方这件事。
您发布的当前代码似乎是您实际上要求使用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
}
这不是一个非常优雅的解决方案,因为您很可能会从其他应用程序中删除音乐流。这取决于您的使用案例,但它可能是一个起点。