AudioFocusRequestClass Класс

Определение

Класс для инкапсуляции сведений о запросе фокусировки звука.

[Android.Runtime.Register("android/media/AudioFocusRequest", ApiSince=26, DoNotGenerateAcw=true)]
public sealed class AudioFocusRequestClass : Java.Lang.Object
[<Android.Runtime.Register("android/media/AudioFocusRequest", ApiSince=26, DoNotGenerateAcw=true)>]
type AudioFocusRequestClass = class
    inherit Object
Наследование
AudioFocusRequestClass
Атрибуты

Комментарии

Класс для инкапсуляции сведений о запросе фокусировки звука. Экземпляр AudioFocusRequest создается с помощью Builderи используется для запроса и отмены аудиофокуса соответственно с AudioManager#requestAudioFocus(AudioFocusRequest) и AudioManager#abandonAudioFocusRequest(AudioFocusRequest).

<h3>Что такое аудиофокус?</h3>

Фокус аудио — это концепция, представленная в API 8. Он используется для передачи того факта, что пользователь может сосредоточиться только на одном аудиопотоке за раз, например, прослушивая музыку или подкаст, но не оба одновременно. В некоторых случаях одновременно может воспроизводиться несколько аудиопотоков, но есть только один, который пользователь будет слушать (сосредоточьтесь на), в то время как другой воспроизводится в фоновом режиме. Примером этого является направление вождения, когда музыка играет на уменьшенной громкости (т. е. утки).

Когда приложение запрашивает фокус аудио, оно выражает намерение "владеть" аудио фокусом для воспроизведения звука. Давайте рассмотрим различные типы запросов фокуса, возвращаемое значение после запроса и ответы на потери. <p class="note"Примечание.> Приложения не должны воспроизводить ничего, пока не будет предоставлен фокус.

<h3>Различные типы запросов< фокуса/h3>

Существует четыре типа запросов фокуса. Успешный запрос фокуса с каждым из них приведет к по-разному поведению системы и другого приложения, которое ранее держало фокус аудио. <ul><li>AudioManager#AUDIOFOCUS_GAIN выражает тот факт, что приложение теперь является единственным источником звука, который пользователь прослушивает. Продолжительность воспроизведения звука неизвестна и, возможно, очень длинная: после завершения взаимодействия пользователя с вашим приложением он не ожидает возобновления другого аудиопотока. Примерами использования этого увеличения фокуса являются воспроизведение музыки, игра или видеопроигрыватель.</Литий>

<Li>AudioManager#AUDIOFOCUS_GAIN_TRANSIENT предназначено для ситуации, когда вы знаете, что ваше приложение временно захватывает фокус у текущего владельца, но пользователь ожидает, что воспроизведение вернется к месту, где оно было после того, как приложение больше не нуждается в фокусе звука. Примером является воспроизведение будильника или во время вызова VoIP. Воспроизведение, как известно, ограничено: время ожидания будильника истекает или будет отклонено, вызов VoIP имеет начало и конец. Когда какое-либо из этих событий заканчивается и если пользователь слушал музыку при запуске, пользователь ожидает возобновления музыки, но не хочет слушать оба одновременно.</Литий>

<Li>AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK: этот тип запроса фокуса похож AUDIOFOCUS_GAIN_TRANSIENT на временный аспект запроса фокуса, но он также выражает тот факт, что во время вашего собственного фокуса вы разрешаете другому приложению продолжать играть с уменьшенным объемом, "ducked". Например, при воспроизведении направлений движения или уведомлений музыка может продолжать играть, но не достаточно громко, чтобы это не позволило понять маршруты. Типичным затуханием "ducked" приложения является коэффициент 0,2f (или -14 дБ), который, например, можно применить с MediaPlayer.setVolume(0.2f) при использовании этого класса для воспроизведения.</Литий>

<Li>AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE также предназначен для временного запроса, но также выражает, что ваше приложение ожидает, что устройство не будет воспроизводить ничего другого. Обычно это используется, если вы выполняете аудиозапись или распознавание речи и не хотите, чтобы в течение этого времени система воспроизводила примеры уведомлений.</li></ul>

Экземпляр AudioFocusRequest всегда содержит один из четырех типов запросов, описанных выше. Он передается при построении экземпляра AudioFocusRequest с его построителем в Builder конструкторе AudioFocusRequest.Builder#Builder(int)или после AudioFocusRequest.Builder#setFocusGain(int) копирования существующего экземпляра с AudioFocusRequest.Builder#Builder(AudioFocusRequest)помощью .

<h3>Квалификация запроса< фокуса/h3><h4>Вариант использования, требующий запроса< фокуса/h4>

Любой запрос фокуса определяется (см. Builder#setAudioAttributes(AudioAttributes)), описывающим вариант использования звука, который будет следовать за запросом AudioAttributes (после его успешного выполнения или предоставления). Для запроса рекомендуется использовать те же AudioAttributes атрибуты, что и атрибуты, используемые для воспроизведения аудио/мультимедиа. <br>Если атрибуты не заданы, используются атрибуты AudioAttributes#USAGE_MEDIA по умолчанию .

<H4>Отложенный фокус</h4>

Аудиофокус может быть "заблокирован" системой по ряду причин: во время телефонного звонка, когда автомобиль, к которому подключено устройство, воспроизводит аварийное сообщение... Для поддержки таких ситуаций приложение может запросить уведомление о выполнении запроса, помечая запрос как принимающее отложенный фокус с Builder#setAcceptsDelayedFocusGain(boolean)помощью . <br>Если фокус запрашивается при блокировке системой, AudioManager#requestAudioFocus(AudioFocusRequest) возвращает .AudioManager#AUDIOFOCUS_REQUEST_DELAYED Если фокус больше не блокируется, прослушиватель фокуса, заданный с Builder#setOnAudioFocusChangeListener(OnAudioFocusChangeListener) или с Builder#setOnAudioFocusChangeListener(OnAudioFocusChangeListener, Handler) , будет вызываться, чтобы уведомить приложение, которое теперь владеет звуковым фокусом.

<h4>Приостановка и утка</h4>

Когда приложение запрашивает аудиофокус с AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCKпомощью , система откатит текущего владельца фокуса. <p class="note"Примечание.> Это поведение является <новым>для Android O</b>, в то время как приложения, предназначенные для уровня ПАКЕТА SDK до API 25, должны были реализовать сам ducking, когда они получили потерю фокуса AudioManager#AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK.

Но утка не всегда является поведением, ожидаемым пользователем. Типичный пример — когда устройство воспроизводит маршруты движения, когда пользователь слушает аудиокниги или подкаст, и ожидает приостановки воспроизведения звука, а не утиной, так как трудно понять подсказку навигации и речевой контент одновременно. Таким образом, система не будет автоматически утка, когда обнаруживает, что это будет утиный речевой контент: такое содержимое обнаруживается, когда AudioAttributes игрок имеет право на AudioAttributes#CONTENT_TYPE_SPEECH. См. пример и AudioAttributes.Builder#setContentType(int)MediaPlayer#setAudioAttributes(AudioAttributes) если вы пишете приложение для воспроизведения мультимедиа для аудиокниги, подкасты... Так как система не будет автоматически использовать приложения, которые воспроизводят речь, вместо этого она вызывает прослушиватель фокусировки, чтобы уведомить их AudioManager#AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCKо , чтобы они могли приостановить работу. Обратите внимание, что это поведение не зависит от использования AudioFocusRequest, но связано с использованием AudioAttributes.

Если для приложения требуется приостановка, а не по какой-либо другой причине, кроме воспроизведения речи, вы также можете объявить это с помощью Builder#setWillPauseWhenDucked(boolean), что приведет к тому, что система будет вызывать ваш прослушиватель фокуса, а не автоматически уходить.

<h4>Example</h4>

В приведенном ниже примере рассматриваются следующие действия, которые можно найти в любом приложении, которое будет воспроизводить звук и использовать фокус аудио. Здесь мы воспроизводим аудиокниги, и наше приложение предназначено для паузы, а не утки, когда он теряет фокус. Эти шаги состоят в: <ul><li>Creating AudioAttributes , который будет использоваться для воспроизведения и запроса фокуса.</li><li li>. Настройка и создание экземпляра AudioFocusRequest , который определяет предполагаемое поведение фокуса.</li><li li>запрашивает аудиофокус и проверяет код возврата, чтобы узнать, может ли воспроизведение произойти сразу или отложено.</li><li li>Реализация прослушивателя изменений фокуса для реагирования на увеличение и потерю фокуса.</li></ul>

// initialization of the audio attributes and focus request
            mAudioManager = (AudioManager) Context.getSystemService(Context.AUDIO_SERVICE);
            mPlaybackAttributes = new AudioAttributes.Builder()
                    .setUsage(AudioAttributes.USAGE_MEDIA)
                    .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
                    .build();
            mFocusRequest = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
                    .setAudioAttributes(mPlaybackAttributes)
                    .setAcceptsDelayedFocusGain(true)
                    .setWillPauseWhenDucked(true)
                    .setOnAudioFocusChangeListener(this, mMyHandler)
                    .build();
            mMediaPlayer = new MediaPlayer();
            mMediaPlayer.setAudioAttributes(mPlaybackAttributes);
            final Object mFocusLock = new Object();

            boolean mPlaybackDelayed = false;

            // requesting audio focus
            int res = mAudioManager.requestAudioFocus(mFocusRequest);
            synchronized (mFocusLock) {
                if (res == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
                    mPlaybackDelayed = false;
                } else if (res == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
                    mPlaybackDelayed = false;
                    playbackNow();
                } else if (res == AudioManager.AUDIOFOCUS_REQUEST_DELAYED) {
                   mPlaybackDelayed = true;
                }
            }

            // implementation of the OnAudioFocusChangeListener
            &#64;Override
            public void onAudioFocusChange(int focusChange) {
                switch (focusChange) {
                    case AudioManager.AUDIOFOCUS_GAIN:
                        if (mPlaybackDelayed || mResumeOnFocusGain) {
                            synchronized (mFocusLock) {
                                mPlaybackDelayed = false;
                                mResumeOnFocusGain = false;
                            }
                            playbackNow();
                        }
                        break;
                    case AudioManager.AUDIOFOCUS_LOSS:
                        synchronized (mFocusLock) {
                            // this is not a transient loss, we shouldn't automatically resume for now
                            mResumeOnFocusGain = false;
                            mPlaybackDelayed = false;
                        }
                        pausePlayback();
                        break;
                    case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                    case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
                        // we handle all transient losses the same way because we never duck audio books
                        synchronized (mFocusLock) {
                            // we should only resume if playback was interrupted
                            mResumeOnFocusGain = mMediaPlayer.isPlaying();
                            mPlaybackDelayed = false;
                        }
                        pausePlayback();
                        break;
                }
            }

            // Important:
            // Also set "mResumeOnFocusGain" to false when the user pauses or stops playback: this way your
            // application doesn't automatically restart when it gains focus, even though the user had
            // stopped it.

Документация по Java для android.media.AudioFocusRequest.

Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом Android и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License.

Свойства

AudioAttributes

AudioAttributes Возвращает набор для этого AudioFocusRequestили атрибуты по умолчанию, если они не были заданы.

Class

Возвращает класс среды выполнения данного объекта Object.

(Унаследовано от Object)
FocusGain

Возвращает тип запроса аудиофокуса, настроенный для этого AudioFocusRequest.

Handle

Дескриптор базового экземпляра Android.

(Унаследовано от Object)
JniIdentityHashCode

Класс для инкапсуляции сведений о запросе фокусировки звука.

(Унаследовано от Object)
JniPeerMembers

Класс для инкапсуляции сведений о запросе фокусировки звука.

PeerReference

Класс для инкапсуляции сведений о запросе фокусировки звука.

(Унаследовано от Object)
ThresholdClass

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

(Унаследовано от Object)
ThresholdType

Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода.

(Унаследовано от Object)

Методы

AcceptsDelayedFocusGain()

Возвращает значение, указывающее, AudioFocusRequest поддерживает ли приложение получение фокуса после временного сбоя запроса.

Clone()

Создает и возвращает копию этого объекта.

(Унаследовано от Object)
Dispose()

Класс для инкапсуляции сведений о запросе фокусировки звука.

(Унаследовано от Object)
Dispose(Boolean)

Класс для инкапсуляции сведений о запросе фокусировки звука.

(Унаследовано от Object)
Equals(Object)

Указывает, равен ли какой-то другой объект этому объекту.

(Унаследовано от Object)
GetHashCode()

Возвращает значение хэш-кода для объекта.

(Унаследовано от Object)
JavaFinalize()

Вызывается сборщиком мусора для объекта , когда сборка мусора определяет, что больше нет ссылок на объект .

(Унаследовано от Object)
Notify()

Пробуждает один поток, ожидающий монитора этого объекта.

(Унаследовано от Object)
NotifyAll()

Пробуждает все потоки, ожидающие на мониторе этого объекта.

(Унаследовано от Object)
SetHandle(IntPtr, JniHandleOwnership)

Задает свойство Handle.

(Унаследовано от Object)
ToArray<T>()

Класс для инкапсуляции сведений о запросе фокусировки звука.

(Унаследовано от Object)
ToString()

Возвращает строковое представление объекта.

(Унаследовано от Object)
UnregisterFromRuntime()

Класс для инкапсуляции сведений о запросе фокусировки звука.

(Унаследовано от Object)
Wait()

Вызывает ожидание текущего потока, пока он не пробудится, как правило, из-за <уведомления><<> или>прерывания или прерывания.><

(Унаследовано от Object)
Wait(Int64)

Вызывает ожидание текущего потока, пока он не пробудится, как правило, путем <уведомления><<> или>прерывания или прерывания<> или до истечения определенного количества реального времени.

(Унаследовано от Object)
Wait(Int64, Int32)

Вызывает ожидание текущего потока, пока он не пробудится, как правило, путем <уведомления><<> или>прерывания или прерывания<> или до истечения определенного количества реального времени.

(Унаследовано от Object)
WillPauseWhenDucked()

Возвращает значение, указывающее, будет ли приложение, которое будет использовать этот AudioFocusRequest параметр, приостанавливаться при запросе на duck.

Явные реализации интерфейса

IJavaPeerable.Disposed()

Класс для инкапсуляции сведений о запросе фокусировки звука.

(Унаследовано от Object)
IJavaPeerable.DisposeUnlessReferenced()

Класс для инкапсуляции сведений о запросе фокусировки звука.

(Унаследовано от Object)
IJavaPeerable.Finalized()

Класс для инкапсуляции сведений о запросе фокусировки звука.

(Унаследовано от Object)
IJavaPeerable.JniManagedPeerState

Класс для инкапсуляции сведений о запросе фокусировки звука.

(Унаследовано от Object)
IJavaPeerable.SetJniIdentityHashCode(Int32)

Класс для инкапсуляции сведений о запросе фокусировки звука.

(Унаследовано от Object)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

Класс для инкапсуляции сведений о запросе фокусировки звука.

(Унаследовано от Object)
IJavaPeerable.SetPeerReference(JniObjectReference)

Класс для инкапсуляции сведений о запросе фокусировки звука.

(Унаследовано от Object)

Методы расширения

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверенного средой выполнения Android.

JavaCast<TResult>(IJavaObject)

Класс для инкапсуляции сведений о запросе фокусировки звука.

GetJniTypeName(IJavaPeerable)

Класс для инкапсуляции сведений о запросе фокусировки звука.

Применяется к