12

该类AudioManager有一个方法abandonAudioFocus()和另一个方法requestAudioFocus()。我想知道什么是音频焦点?如果AudioManager对象获得音频焦点或失去音频焦点会发生什么?

谢谢!

4

2 回答 2

46

它与使用扬声器时的优先级有关,以防止一次播放许多东西或被覆盖。如果你requestAudioFocus(),你声明你想要控制。然后你可以听听,onAudioFocusChange(int focusChange)看看是否有其他东西试图播放声音。您可能会强制失去焦点(例如在通话期间),但稍后您可以重新获得它。完成后你应该abandonAudioFocus()这样做。

于 2011-07-05T03:47:36.230 回答
0
  AudioManager am = (AudioManager)getContext().getSystemService(AUDIO_SERVICE);
                        AudioManager.OnAudioFocusChangeListener focusChangeListener =
                                focusChange -> {
                    };
                        int result = am.requestAudioFocus(focusChangeListener,
                                AudioManager.STREAM_MUSIC,
                                AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);
                        if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
                            mp = new android.media.MediaPlayer();
                            mp.setOnCompletionListener(mediaPlayer -> {
                                am.abandonAudioFocus(focusChangeListener);
                            });
                            mp.setDataSource("/data/data/" + getContext().getPackageName() + "/rasa.wav");
                            mp.prepare();
                            mp.start();
                        }
于 2019-12-22T11:43:48.200 回答