我是一位对Android和Java不太熟悉的新手。我一直在使用Android开发者和其他网站提供的MediaPlayer和AudioManager示例。
我注意到,在调用requestAudioFocus()时似乎有两个不同的签名被使用。 例如,从http://developer.android.com/guide/topics/media/mediaplayer.html这个网站上可以看到:
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN);
if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
// could not get audio focus.
}
以下是文本翻译:
"requestAudioFocus() 的第一个参数是 AudioManager.OnAudioFocusChangeListener 接口,它的 onAudioFocusChange() 方法在音频焦点改变时被调用。因此,您还应该在服务和活动中实现此接口。例如:" (代码如下)
class MyService extends Service
implements AudioManager.OnAudioFocusChangeListener {
// ....
public void onAudioFocusChange(int focusChange) {
// Do something based on focus change...
}
}
从以下网站获取信息: http://developer.android.com/training/managing-audio/audio-focus.html 其中包括:
OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT) {
// Pause playback
} else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
// Resume playback
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
am.abandonAudioFocus(afChangeListener);
// Stop playback
}
}
};
AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE);
...
// Request audio focus for playback
int result = am.requestAudioFocus(afChangeListener,
// Use the music stream.
AudioManager.STREAM_MUSIC,
// Request permanent focus.
AudioManager.AUDIOFOCUS_GAIN);
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
am.registerMediaButtonEventReceiver(RemoteControlReceiver);
// Start playback.
}
我在许多涉及处理音频焦点变化的示例代码网站上看到了这种二分法。我的理解是,"this" 提供了应用当前状态的上下文环境。我不明白为什么有些情况下调用 requestAudioFocus() 方法时正确的参数是 "this" 而不是一个变化监听器的句柄。
实际上,我提供的第一个示例说明了第一个参数应该是 AudioManager.OnAudioFocusChangeListener,但却使用了 "this"。
如果您能解释一下为什么使用 "this" 而不是 AudioManager.OnAudioFocusChangeListener 作为参数,那将非常感激。