Android Q добавя нов API за запис на вътрешния аудио изход от друго приложение и също така за наблюдение на температурата на устройството.
Google дава и Google отнема. Всяка нова версия на Android въвежда много нови API, които или подобряват функционалността на съществуващите приложения, или отварят нови категории приложения. От друга страна, Google също премахва достъпа до или ограничава възможностите на съществуващите API, за да подобри сигурността на платформата Android. Версията на Android Q не е по-различна и вече сме говорили много за нейните промени в споделеното хранилище, достъпа до клипборда, известията и други API. На тази година Конференция за разработчици на Google I/O, Google обяви нови API в Android Q, които са особено интересни за потребителите и разработчиците на мобилни игри: AudioPlaybackCapture и Термални API.
Записване на аудио от други приложения с AudioPlaybackCapture в Android Q
Мобилните игри са огромна индустрия без признаци за забавяне в скоро време, особено на пазари като САЩ, Китай и Индия. Тъй като все повече хора прекарват време на своите смартфони за игри и социални медии, не е изненадващо, че хората искат да споделят изживяванията си от игри онлайн.
Android поддържа правенето на екранни снимки от самото начало, но заснемането на видеоклипове от екрана се поддържа едва след Android 5.0 Lollipop с въвеждането на API за MediaProjection. За съжаление, този API не позволява на приложения на трети страни да записват вътрешния аудио изход в други приложения, принуждавайки устройства за запис на екрана на трети страни да записват външен аудио изход от микрофона на устройството (с). OEM производители като Samsung и Huawei предоставя системни приложения за запис на вътрешния аудио изход по време на запис на екрана, но единственият начин за собствениците на други устройства, за да записват правилно видео и аудио изхода от своите устройства, е да купуват а аксесоар на трета страна. За щастие Google най-накрая въвежда начин в Android Q за приложения на трети страни да записват аудио от други приложения.
API AudioPlaybackCapture е описан от Google като аналог на заснемането на екрана, но за аудио запис. Въпреки че единственото приложение досега, което използва API, е на Google Надписи на живо, инструмент за достъпност, който добавя надписи към всяко видео, което се възпроизвежда на устройството, API документацията посочва, че основната му цел е да позволи на стрийминг приложенията да заснемат аудио съществото играни от игри. Помислете за мобилните геймъри, които стриймват своите сесии в услуги като Twitch или YouTube. Приложният програмен интерфейс (API) е проектиран да не влияе върху латентността на звука на приложението, чието аудио се записва, което го прави идеален за запис на игра, така че аудиото и видеото да не се десинхронизират.
За разлика от ранните дни на Android, подходът на Google към новите API е по-предпазлив. AudioPlaybackCapture може да се използва само ако и приложението, чийто звук се заснема, и приложението, извършващо заснемането, отговарят на конкретни изисквания. Ето обобщение на тези изисквания:
- За да може звукът на дадено приложение да бъде заснет от приложение на трета страна, трябва да бъдат изпълнени следните изисквания:
- Приложението трябва да има enableAudioPlaybackCapture или да е зададено на true или да е изключено в техния манифест. (По подразбиране е true за приложения, насочени към Android Q, но може да се настрои ръчно за приложения, насочени към Android Pie.)
- Приложението, произвеждащо аудио, трябва да има аудио използване от тип USAGE_MEDIA, USAGE_GAME или USAGE_UNKNOWN.
- Правилата за заснемане на звук (setAllowedCapturePolicy) трябва да бъдат зададени на ALLOW_CAPTURE_BY_ALL. Тази политика може да бъде зададена по време на изпълнение, но възпроизвеждането трябва да се рестартира, за да влезе в сила промяната на политиката. Ако е зададено ALLOW_CAPTURE_BY_SYSTEM, само системните приложения могат да записват аудиото (но са ограничени в че не могат да запазят аудиото, да го предадат на приложение на трета страна или да записват при > 16kHz 16-bit mono качество.)
- За да може дадено приложение да записва аудио от друго приложение, трябва да бъдат изпълнени следните изисквания:
- Приложението трябва да изведе подканата MediaProjectionManager.createScreenCaptureIntent и потребителят трябва да го приеме.
- Приложението трябва да поддържа ЗАПИС_АУДИО разрешение.
- Приложението трябва да е в същия потребителски профил като приложението, чийто звук ще бъде записан.
- Приложението трябва да изведе подканата MediaProjectionManager.createScreenCaptureIntent и потребителят трябва да го приеме.
Предполагам, че повечето игри ще позволят звукът им да бъде заснет от приложения, използващи този нов API, но може да отнеме известно време, докато игрите се актуализират, за да го поддържат. От друга страна, не очаквайте приложения за стрийминг на музика или видео да поддържат този API за трети страни поради проблеми с лицензирането. Ограниченията, които Google е наложил обаче, ако дадено приложение зададе своята политика за улавяне на аудио на ALLOW_CAPTURE_BY_SYSTEM, означава, че разработчиците на приложения за поточно предаване на музика и видео би трябвало да са съгласни с разрешаването на аудио улавяне от системата за подобряване на достъпността.
За да прочетете повече за API на AudioPlaybackCapture в Android Q, разгледайте тази страница.
Мониторинг на дроселиране с Thermal API в Android Q
Термичното регулиране се управлява почти изцяло от системата без въвеждане от или дори известяване към приложенията, които са най-засегнати от регулирането. Ако ресурсите на устройството са твърде напрегнати, повечето устройства ще намалят скоростите на процесора и графичния процесор в ущърб на производителността на вашата игра. Няма нищо, което вие, като разработчик на игри, наистина можете да направите по въпроса, освен да предупредите потребителя, преди да промени каквито и да е настройки, за потенциалното въздействие, което техните промени могат да имат върху производителността.
С новия Thermal API в Android Q обаче приложенията могат да получават обратни извиквания за различни етапи на регулиране на производителността - давайки шансът на разработчиците да помогнат за намаляване на напрежението върху устройството, като намалят дейностите, които изискват значителен CPU, GPU или модем използване. Например, дадена игра може динамично да намали разделителната способност, докато устройството вече не дроселира GPU, или приложение Карти може да деактивира подобрени функции като навигация с добавена реалност за намаляване на натоварването на процесора.
За да използват този нов API, приложенията регистрират слушател в PowerManager (addThermalStatusListener) и системата изпраща на приложението един от следните кодове за термично състояние:
- THERMAL_STATUS_NONE: "Не е под дроселиране."
- THERMAL_STATUS_LIGHT: „Намаляване на светлината, където UX не е засегнат.“
- THERMAL_STATUS_MODERATE: „Умерено ограничаване, където UX не е силно засегнат.“
- THERMAL_STATUS_SEVERE: „Тежко дроселиране, при което UX е силно засегнат.“
- THERMAL_STATUS_CRITICAL: „Платформата направи всичко, за да намали мощността.“
- THERMAL_STATUS_EMERGENCY: „Ключови компоненти в платформата се изключват поради термично състояние. Функционалностите на устройството ще бъдат ограничени."
- THERMAL_STATUS_SHUTDOWN: „Трябва незабавно изключване.
Поддръжката на Thermal API очевидно изисква Android Q, но друго изискване е добавянето на нов HAL. Google казва, че устройствата Pixel с Android Q (което означава Pixel, Pixel XL, Pixel 2, Pixel 2 XL, Pixel 3, Pixel 3 XL, Pixel 3a, и Pixel 3a XL) поддържат Thermal API, но Google работи върху добавянето на поддръжка за други устройства.
Прочетете повече за Thermal API тук.