requestaudiofocus的正确论据是什么?

时间:2015-01-01 02:02:51

标签: java android audio

我是Android和Java的新手。我一直在使用Android Developer和其他网站提供的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.
}

我已经在众多网站上看到了这种二分法,提供了处理音频焦点变化的示例代码。 我的理解是"这个"提供应用程序当前状态的上下文。 我不明白为什么在某些情况下"这个"是正确的参数,而在其他情况下,在调用requestAudioFocus()时,更改侦听器的句柄是正确的参数。

实际上我提供的第一个例子说明第一个参数应该是AudioManager.OnAudioFocusChangeListener。但是"这个"使用。

如果你能解释为什么"这个"用来代替AudioManager.OnAudioFocusChangeListener作为参数,我们将非常感激。

1 个答案:

答案 0 :(得分:5)

总是需要一个onAudioFocusedChangeListener。在传递this的情况下,当前类实现onAudioFocusChangeListener接口。