我需要一个简单的演示,其中我想检查音乐是否在后台运行?并且也不会影响在后台运行的音乐
我从这里读到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);
需要为我想要的东西添加什么。请帮忙把它做成东西。
答案 0 :(得分: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
}
这不是一个非常优雅的解决方案,因为您很可能会从其他应用中删除音乐流。这取决于您的使用案例,但它可能是一个起点。