Java requestaudiofocus的正确参数是什么?

Java requestaudiofocus的正确参数是什么?,java,android,audio,Java,Android,Audio,我不熟悉Android和Java。我一直在使用Android开发者和其他网站提供的MediaPlayer和AudioManager示例 我注意到,对于requestAudioFocus()的调用,似乎使用了两个独立的签名。 例如,从 现场有: AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); int result = audioManager.requestAudioFocus(

我不熟悉Android和Java。我一直在使用Android开发者和其他网站提供的MediaPlayer和AudioManager示例

我注意到,对于requestAudioFocus()的调用,似乎使用了两个独立的签名。 例如,从 现场有:

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.
}
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.
}
全文如下:

requestAudioFocus()的第一个参数是AudioManager.OnAudioFocusChangeListener,只要音频焦点发生变化,就会调用其onAudioFocusChange()方法。因此,您还应该在服务和活动上实现此接口。例如: (代码如下:)

然后从网站: 有:

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.
}
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”提供了应用程序当前状态的上下文。 我不明白为什么在某些情况下“this”是正确的参数,而在其他情况下,调用requestAudioFocus()时更改侦听器的句柄是正确的参数

事实上,我提供的第一个示例说明第一个参数应该是AudioManager.OnAudioFocusChangeListener。但使用“this”


如果您能解释为什么使用“this”而不是AudioManager。如果使用onAudioFocusedChangeListener作为参数,我们将不胜感激。

始终需要onAudioFocusedChangeListener。在这种情况下,当前类将实现onAudioFocusChangeListener接口。

谢谢。这是否意味着使用“this”是不正确的?不,如果您的类使用“this”实现onAudioFocusChangedListener接口是完全有效的。而且相当普遍。请忽略我的后续问题。我明白你的意思。再次感谢。