Android类AudioManager中的音频焦点是什么?

12

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

谢谢!

2个回答

46

这与使用扬声器时的优先级有关,以避免同时播放多个音频或被覆盖。如果你调用requestAudioFocus(),就表示你要控制音频焦点。然后你可以使用onAudioFocusChange(int focusChange)来监听是否有其他音频尝试播放。你可能会强制失去音频焦点(例如在接听电话期间),但之后可以重新获得它。在完成后应该使用abandonAudioFocus()


如果我想让我的音频保持播放状态,而没有任何东西(甚至没有电话)与之配合,我该怎么办? - android developer

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();
                        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接