Android AudioFocusChangeListener无法侦听
我在使用AudioFocusChangeListener时遇到问题,但仍然无法收听音频焦点的更改。有人能帮我找到原因吗?以下是我的工作:Android AudioFocusChangeListener无法侦听,android,audio,listener,multimedia,android-audiomanager,Android,Audio,Listener,Multimedia,Android Audiomanager,我在使用AudioFocusChangeListener时遇到问题,但仍然无法收听音频焦点的更改。有人能帮我找到原因吗?以下是我的工作: 在我的FM应用程序中,当FM在startFM中启动时,我放置requestAudioFocus()以获取资源: int result = mAudioManager.requestAudioFocus(mAudioFocusListener, AudioManager.STREAM_FM,AudioManager.AUDIOFOCUS_GAIN_TRANSIE
requestAudioFocus()
以获取资源:
int result = mAudioManager.requestAudioFocus(mAudioFocusListener, AudioManager.STREAM_FM,AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
Log.d(LOGTAG, "Successfull to request audioFocus listener");
} else {
Log.d(LOGTAG, "Failure to request focus listener");
}
onDestroy()
中退出应用程序时,我使用放弃AudioFocus()
来释放资源mAudioFocusListener
如下所示:
private OnAudioFocusChangeListener mAudioFocusListener = new OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_LOSS:
Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_LOSS, turning FM off");
if (isFmOn()) {
fmOff();
}
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK");
if (isFmOn()) {
Log.d(LOGTAG, "AudioFocus: FM is on, turning off");
mute();
stopFM();
}
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_LOSS_TRANSIENT");
if (isFmOn()) {
Log.d(LOGTAG, "AudioFocus: FM is on, turning off");
mute();
stopFM();
}
break;
case AudioManager.AUDIOFOCUS_GAIN:
Log.v(LOGTAG, "AudioFocus: received AUDIOFOCUS_GAIN");
if (isFmOn()) {
Log.d(LOGTAG, "AudioFocus: FM is off, turning back on");
unMute();
startFM();
}
break;
default:
Log.e(LOGTAG, "Unknown audio focus change code " + focusChange);
}
}
};
AudioForcus
更改日志。有人能找出它的毛病吗private class MyService extends Service implements AudioManager.OnAudioFocusChangeListener {
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_LOSS:
Log.e(TAG, "AudioFocus: received AUDIOFOCUS_LOSS, turning FM off");
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
Log.e(TAG, "AudioFocus: received AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK");
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
Log.e(TAG, "AudioFocus: received AUDIOFOCUS_LOSS_TRANSIENT");
break;
case AudioManager.AUDIOFOCUS_GAIN:
Log.v(TAG, "AudioFocus: received AUDIOFOCUS_GAIN");
break;
default:
Log.e(TAG, "Unknown audio focus change code " + focusChange);
}
}
public IBinder onBind(Intent intent) {
return null;
}
}
而且
mAudioManager.requestAudioFocus(new MyService(), AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
它适合我。DeerCoder
我相信,如果您请求AudioManager.STREAM_音乐类型的音频焦点,您将只收到影响此特定音频流的事件
mAudioManager.requestAudioFocus(new MyService(), AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
警报和通知在单独的音频流上进行管理,如AudioManager.stream\u通知、AudioManager.stream\u警报、AudioManager.stream\u铃声等。谢谢,音乐和FM似乎有冲突。我通过修改音乐解决了这一问题。音乐应用程序在中断后已成为焦点。谢谢大家。
mAudioManager.requestAudioFocus(new MyService(), AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
mAudioManager.requestAudioFocus(new MyService(), AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);