Android audiomanager

У класу досить велика кількість констант і методів, але сам клас простий у використанні.

Користувачі можуть чути звук через вбудований динамік, роз'єм для дротової гарнітури, Bluetooth (A2DP аудіо). Ви можете через AudioManager визначити, куди в даний час прямує аудиопоток і виконати будь-яка дія, наприклад, приглушити звук:







Система оповіщає через широковещательное намір ACTION_AUDIO_BECOMING_NOISY про зміну джерела звуку. Зареєструйте BroadcastReceiver і слухайте потрібне намір.

У деяких інших прикладах на сайті також використовується AudioManager.

Управління гучністю і відтворенням

Ви можете управляти гучністю в своєму додатку, використовуючи апаратні або програмні засоби контролю звуку пристрою, блютуз-гарнітури або навушників.

Також ви можете управляти відтворенням аудиопотока - пауза, стоп і т.д.

Android підтримує окремі звукові потоки для відтворення музики, сигналу будильника, оповіщення, вхідного дзвінка, системних звуків, вхідного дзвінка і DTMF тонів. Користувач може управляти гучністю кожного потоку окремо.

За замовчуванням, при натисканні клавіш регулювання гучності, змінюється рівень гучності поточного аудиопотока. Якщо ваш додаток в даний момент не відтворює аудіо, то клавіші регулювання гучності регулюють гучність мелодії вхідного дзвінка. Якщо у вас гра або музичний додаток, то коли користувач натискає клавіші регулювання гучності, він хоче змінювати гучність гри або музики.

Метод setVolumeControlStream () використовується для прямого доступу до клавіш регулювання гучності для звукового потоку, який ви вкажете. З'ясувавши, який аудіо потік буде використовувати додаток, ви повинні встановити його в якості вихідного звукового потоку. Зазвичай його викликають в методі onCreate ().

З цього моменту натискання клавіш регулювання гучності на пристрої впливають на зазначений звуковий потік, коли ваша активність або фрагмент є видимим.

Щоб обробити натискання медіа-кнопки, вам необхідно зареєструвати BroadcastReceiver в файлі маніфесту:

Реалізація приймача сама повинна отримувати натиснуту клавішу, передану в оповіщенні. Об'єкт Intent включає в себе ключ EXTRA_KEY_EVENT. клас KeyEvent включає в себе список статичних констант KEYCODE_MEDIA_ *. який містить всі можливі медіа-кнопки, такі як KEYCODE_MEDIA_PLAY_PAUSE і KEYCODE_MEDIA_NEXT.

Наступний фрагмент показує, як отримати натиснуту медіа-кнопку і змінити відтворення медіа.

Так як кілька додатків можуть обробляти натискання медіа-кнопок, ви повинні програмно керувати тим, коли ваш додаток має отримувати натискання кнопок. Наступний код може використовуватися в вашому додатку для реєстрації і скасування реєстрації вашого приймача подій від медіа-кнопок за допомогою AudioManager.

Як правило, додатки повинні відключати приймачі, коли вони стають неактивними або невидимими. Однак, це не так просто для додатків, що відтворюють мультимедіа - насправді відповідати на натискання кнопок відтворення найбільш важливо, коли програма не видно і, отже, не може управлятися з екрану призначеного для користувача інтерфейсу. Кращий підхід полягає в реєстрації і скасування реєстрації приймача подій медіа-кнопок, коли ваш додаток отримує і втрачає аудіофокус.







управління аудіофокусом

Щоб не вийшло так, що відразу кілька додатків одночасно програють аудиопоток, система використовує аудіофокус для контролю режиму відтворення аудіо. Відтворювати звук має тільки той додаток, що має аудіофокус. Тому ви самі повинні подбати, щоб ваше додаток запросило аудіофокус, а також вміти визначати момент втрати аудіофокуса і зреагувати відповідним чином.

Запит аудіофокуса робиться за допомогою методу requestAudioFocus (). який повертає AUDIOFOCUS_REQUEST_GRANTED. якщо запит був успішним.

Ви повинні вказати який потік ви будете використовувати і який тип аудіофокуса вам потрібно - тимчасовий (transient) або постійний (permanent). Запитуйте тимчасовий фокус, якщо ви припускаєте відтворювати аудіо протягом короткого часу. При відтворенні музики краще запитувати постійний аудіофокус.

Запитаємо постійний аудіофокус в музичному потоці, перш ніж почати відтворення, наприклад, коли користувач натискає грати або починає програватися фонова музика для переходу на наступний рівень гри.

Коли додаток закінчило відтворення, необхідно викликати метод abandonAudioFocus (). Метод повідомить систему про те, що вам більше не потрібно аудіофокус і скасує реєстрацію пов'язану з AudioManager.OnAudioFocusChangeListener. У разі скасування тимчасового аудіофокуса, виклик дозволить будь-якому перерваного додатком продовжити відтворення.

При запиті тимчасового аудіофокуса у вас є додаткова опція: активувати приглушення (ducking). Зазвичай, коли додаток втрачає аудіофокус, воно негайно заглушає відтворення. Запитуючи тимчасовий аудіофокус, який дозволяє приглушення, ви говорите іншим додаткам, що вони можуть продовжити відтворювати аудіо зі зниженою гучністю, поки фокус не буде їм повернуто.

Приглушення підходить для додатків, які використовують аудиопоток з інтервалами, наприклад, для відтворення вказівок при прокладанні маршруту проїзду.

Ваша програма може втратити фокус, коли його запросить іншу програму. Як передзвонити методу onAudioFocusChange () слухача змін аудіофокуса, який ви зареєстрували при запиті аудіофокуса, отримує параметр, що описує подію зміни фокусу. Зокрема, щодо ситуацій втрати фокусу відображають типи запитів фокуса з попереднього розділу, постійна втрата, тимчасова втрата і тимчасова втрата з приглушенням.

Ви повинні продовжувати стежити за змінами фокуса і бути готовим продовжити відтворення з того місця де воно було припинено, як тільки ви відновите фокус.

Якщо втрата аудіофокуса є постійною, то передбачається, що в даний час інший додаток використовується для прослуховування аудіо і ваше застосування повинне ефективно себе закінчити.

У наступному лістингу, ми припинимо відтворення, якщо втрата аудіофокуса тимчасова і відновимо його, коли знову отримаємо аудіофокус. Якщо втрата є постійною, то вона скасовує реєстрацію нашого приймача подій кнопок і припиняє контролювати зміни аудіофокуса.

У разі тимчасової втрати аудіофокуса, де дозволяється приглушення, ви можете "зробити тихіше".

У наступному прикладі ми знижуємо гучність медіа-програвач, коли він тимчасово втрачає аудіофокус, а потім повертає гучність на колишній рівень, коли фокус повертається.

управління мікрофоном

Перевірити, чи вимкнене мікрофон, можна за допомогою методу isMicrophoneMute ():

Включити або вимкнути мікрофон можна за допомогою метод setMicrophoneMute ():

Використання динаміків

Метод isSpeakerphoneOn () дозволяє визначити, чи грає музика через динаміки.

Переключитися на динаміки або відключити їх можна через метод setSpeakerphoneOn ():

додаткове читання

Режим «Без звуку» - управління режимами Звичайний, Без звуку, Вібрація.







Схожі статті