Replay: зростаюча боротьба керування відтворенням Bluetooth

Це те, що я використовую на роботі, вдома, в ліжку, в душі і всюди між ними, щоб зберігати мене в здоровому глузді і щасливим. Музика робить мене краще, і, оскільки музика - велика частина мого досвіду роботи з Android, я повільно переживав занепад, який я болісно усвідомлював в останні кілька років, і особливо в останні кілька місяців.


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


У мої перші дні Android, коли Соарін був у моїй кишені (так, я назвав свій Samsung Captivate Glide) і мої перші пару навушників Kinivo Bluetooth на моїй шиї, мені не потрібно було відкривати Google Play Music, мені просто потрібно було натиснути грати на моїх навушниках. Фактично я вийняв Samsung Galaxy SII з ящика, завантажив його вперше за кілька місяців, з'єднав з ним навушники Bluetooth і натиснув кнопку відтворення. І музика грає.

Не так багато на нинішніх пристроях у мене в стайні.

HTC 10 просто не підпорядковується елементам управління Bluetooth іноді, постійне повідомлення для музичного додатку чи ні. Швидше, я натисну кнопку відтворення на своєму мото 360 або на самому телефоні. HTC A9 такий же вибагливий. Nexus 5X іноді не запускає музику назад з постійним повідомленням, але іноді робить це без нього. Буде відтворюватися Samsung S6 edge, але іноді замість відтворення музичної програми, яка була активована востаннє, за замовчуванням вона повертається до попередньо завантаженої музичної програми.

Тут постійно повторюється слово: іноді. Це пов'язано з тим, що в цій проблемі багато змінних: який пристрій Android ви використовуєте, який пристрій Bluetooth використовуєте, яку версію Android і Bluetooth використовуєте ваші пристрої, який музичний додаток ви намагаєтеся відтворити, в якому середовищі ви знаходитеся і т. д. Це дуже багато для того, щоб зробити внесок у уявну просту проблему непрацездатності кнопок при кожному натисканні.

Так що насправді тут відбувається? Ну, відповідь стає трохи - добре, багато - технічна.

Коли ви натискаєте кнопку, вона інтерпретується Android і транслюється по всій системі через KceEvents. Наступна кнопка на вашій гарнітурі інтерпретується і доставляється як KEYCODE_MEDIA_NEXT через KceEvent. Існує велика різноманітність значень, які можна вибрати для різних кнопок або навіть для однієї і тієї ж кнопки. Кнопка відтворення на більшості гарнітур також є кнопкою паузи, тому клавіша може повертати KEYCODE_MEDIA_PAUSE, KEYCODE_MEDIA_PLAY або набагато більш ймовірну KEYCODE_MEDIA_PLAY_PAUSE залежно від пристрою і його поточного стану. До речі, якщо ви коли-небудь натискали паузу, а музика починалася десь ще, в той час як те, що ви дивилися/слухали, припинялося, це винен KceEvent, тому що він був отриманий і оброблений двома додатками.


Після інтерпретації KceEvents вони все одно повинні прослуховуватися музичним додатком, який прослуховує мультимедійні кнопки через намір BroadcastReceiver. Зрештою, програма не може працювати з KceEvent, якщо вона його не бачить. Якщо щось заважає одержувачу в додатку приймати натискання кнопок, це може призвести до плутанини в елементах управління відтворенням кількома способами, включаючи проблему з перебоями, описану вище. Якщо програма занадто швидко скасовує реєстрацію свого BroadcastReceiver, коли вона втрачає Audio Focus (метод, за допомогою якого Android визначає, які програми можуть відтворювати звук в даний момент часу), тоді, коли ви призупиняєте свою музику, вона може втратити припинення прослуховування і не почути натискання кнопки, яка повідомляє це, щоб почати грати знову. Ось чому важливо, щоб мультимедійні програми правильно обробляли і Audio Focus, і свій BroadcastReceiver, щоб навіть коли пристрій втратив перший, він не втратив другий.

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

У таких додатках, як Google Play Music, оновлення, що порушують роботу, стають все більш частими. У той час як більшість перерв виправляються швидко, інші можуть зайняти місяці для виправлення. Тимчасові проблеми, такі як ваша музика не запускається належним чином по Bluetooth, можуть бути важкі для реєстрації і правильної ідентифікації, ще більше уповільнюючи можливе виправлення.

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

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

Перше рішення трохи екстремальне, але одне з небагатьох, які користувачі можуть реалізувати на своїх нинішніх телефонах без будь-яких кореневих змін програмного забезпечення. Використовуючи такі програми, як Tasker і AutoInput, ми можемо виявити натискання кнопки, придушити вихідну дію KceEvent, а потім виконати більш спеціалізовану (і більш узгоджену) команду, спрямовану безпосередньо на одну програму. Наприклад, замість кнопки відтворення, яка є універсальною командою відтворення мультимедіа, яка може бути захоплена або проігнорована десятками мультимедійних служб, ми можемо перепризначити її як команду перемикання відтворення/паузи, специфічну для Google Play Music, щоб інші програми не почати замість цього.

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


Багато телефонів включають набір жестів і кнопок, які ви можете включити або вимкнути в налаштуваннях, наприклад, двічі натисніть, щоб розбудити, або двічі натисніть Home/power для камери. Хоча додавання елементів управління Bluetooth до цього списку може подовжити і ускладнити його, якби система Android повинна була підтверджувати і направляти KceEvent на конкретний додаток, а не передавати загальний сигнал на ті приймачі, які прослуховують (або не прослуховують), ми могли б забезпечити узгодженість. Ми вже бачили це на пристроях, наприклад, відкривши Moto Assist, включивши призначений музичний додаток, коли він підключений до Bluetooth вашого автомобіля.

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

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

COM_SPPAGEBUILDER_NO_ITEMS_FOUND