private static int changedFocus;
private static boolean focusGranted;
private static AudioManager audioManager;
public static int getChangedFocus() {
return changedFocus;
}
public static boolean isFocusGranted() {
return focusGranted;
}
public static void requestFocus(final Context context) {
if (audioManager == null) {
audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
}
switch (audioManager.requestAudioFocus(OnFocusChangeListener.getInstance(),
AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN)) {
case AudioManager.AUDIOFOCUS_REQUEST_GRANTED:
focusGranted = true;
break;
case AudioManager.AUDIOFOCUS_REQUEST_FAILED:
focusGranted = false;
break;
}
}
private static final class OnFocusChangeListener implements AudioManager.OnAudioFocusChangeListener {
private static OnFocusChangeListener instance;
protected static OnFocusChangeListener getInstance() {
if (instance == null) {
instance = new OnFocusChangeListener();
}
return instance;
}
@Override
public void onAudioFocusChange(final int focusChange) {
changedFocus = focusChange;
System.out.println("on focus change: " + focusChange);
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
GlobalMusicPlayer.onFocusGained();
break;
case AudioManager.AUDIOFOCUS_LOSS:
GlobalMusicPlayer.onFocusLoss();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
GlobalMusicPlayer.onFocusLossTransient();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
GlobalMusicPlayer.onFocusLossTransientCanDuck();
break;
}
}
}
我調用requestFocus(context)並獲取AudioManager.AUDIOFOCUS_REQUEST_GRANTED作爲返回值。onAudioFocusChange not called
之後,onAudioFocusChange從來沒有所謂的,因此changedFocus始終爲0
isFocusGranted() // true
getChangedFocus() // 0
設備:Nexus 10上,摩托羅拉XOOM。
謝謝。我認爲AUDIOFOCUS_REQUEST_GRANTED意味着我將在不久的將來收到通知。 –