Android Q lägger till ett nytt API för att spela in den interna ljudutgången från en annan app och även för att övervaka enhetens temperatur.
Google ger och Google tar bort. Varje ny Android-version introducerar många nya API: er som antingen förbättrar funktionaliteten hos befintliga appar eller öppnar upp nya kategorier av appar. Å andra sidan tar Google också bort åtkomst till eller begränsar kapaciteten hos befintliga API: er för att förbättra säkerheten för Android-plattformen. Android Q-versionen är inte annorlunda, och vi har redan pratat mycket om dess ändringar av delad lagring, åtkomst till urklipp, aviseringar och andra API: er. På årets Google I/O-utvecklarkonferens, Google tillkännagav nya API: er i Android Q som är särskilt intressanta för användare och mobilspelsutvecklare: AudioPlaybackCapture och Termiska API: er.
Spela in ljudet från andra appar med AudioPlaybackCapture i Android Q
Mobilspel är en enorm bransch utan några tecken på att sakta ner snart, särskilt på marknader som USA, Kina och Indien. Med fler människor som spenderar tid på sina smartphones för spel och sociala medier är det ingen överraskning att folk vill dela sina spelupplevelser online.
Android har stödt att ta skärmdumpar sedan i princip från början, men att spela in videor på skärmen har bara stöds sedan Android 5.0 Lollipop med introduktionen av MediaProjection API. Tyvärr tillåter inte detta API att tredjepartsappar spelar in den interna ljudutgången i andra appar, tvingar tredjepartsskärminspelare att spela in extern ljudutgång från enhetens mikrofon (s). OEM-tillverkare som Samsung och Huawei tillhandahålla systemappar för att spela in den interna ljudutgången under en skärminspelning, men det enda sättet för ägare av andra enheter att korrekt spela in video och ljud från sina enheter är att köpa a tillbehör från tredje part. Lyckligtvis introducerar Google äntligen ett sätt i Android Q för appar från tredje part att spela in ljud från andra appar.
AudioPlaybackCapture API beskrivs av Google som analogen av skärmdump, men för ljudinspelning. Även om den enda appen som hittills använder API är Googles Live Caption, ett tillgänglighetsverktyg som lägger till bildtexter till alla videor som spelas på enheten, API: erna dokumentationen anger att dess primära syfte är att tillåta strömmande appar att fånga ljudvarelsen spelas av spel. Tänk att mobilspelare streamar sina sessioner till tjänster som Twitch eller YouTube. API: et är utformat för att inte påverka ljudfördröjningen för appen vars ljud spelas in, vilket gör den perfekt för spelinspelning så att ljud och video inte desynkroniseras.
Till skillnad från Androids tidiga dagar är Googles inställning till nya API: er mer försiktig. AudioPlaybackCapture kan endast användas om både appen vars ljud spelas in och appen som gör infångningen uppfyller specifika krav. Här är en sammanfattning av dessa krav:
- För att en apps ljud ska fångas upp av en tredjepartsapp måste följande krav uppfyllas:
- Appen måste ha allowAudioPlaybackCapture antingen inställt på sant eller avaktiverat i sitt manifest. (Det är som standard sant för appar som är inriktade på Android Q, men kan ställas in manuellt för appar som är inriktade på Android Pie.)
- Appen som producerar ljud måste ha sin ljudanvändning av typen USAGE_MEDIA, USAGE_GAME eller USAGE_UNKNOWN.
- Ljudinspelningspolicyn (setAllowedCapturePolicy) måste vara inställd på ALLOW_CAPTURE_BY_ALL. Denna policy kan ställas in under körning, men uppspelningen måste startas om för att policyändringen ska träda i kraft. Om ALLOW_CAPTURE_BY_SYSTEM är inställt kan endast systemappar spela in ljudet (men är begränsade i att de inte kan spara ljudet, skicka det till en tredjepartsapp eller spela in vid > 16kHz 16-bitars mono kvalitet.)
- För att en app ska kunna spela in ljud från en annan app måste följande krav uppfyllas:
- Appen måste visa MediaProjectionManager.createScreenCaptureIntent-prompten och användaren måste acceptera den.
- Appen måste hålla SPELA IN LJUD lov.
- Appen måste vara i samma användarprofil som appen vars ljud kommer att spelas in.
- Appen måste visa MediaProjectionManager.createScreenCaptureIntent-prompten och användaren måste acceptera den.
Jag kan föreställa mig att de flesta spel kommer att tillåta deras ljud att fångas av appar som använder detta nya API, men det kan ta lite tid för spel att uppdateras för att stödja det. Å andra sidan, förvänta dig inte att några musik- eller videoströmningsappar stöder detta API för tredje part på grund av problem med licensiering. Men de begränsningar som Google har infört om en app ställer in sin ljudinsamlingspolicy till ALLOW_CAPTURE_BY_SYSTEM innebär att utvecklare av appar för musik och videoströmning borde vara okej med att aktivera ljudinfångning av systemet för att förbättra tillgängligheten.
För att läsa mer om AudioPlaybackCapture API i Android Q, kolla in denna sida.
Övervakning av strypning med Thermal API i Android Q
Termisk strypning hanteras nästan helt av systemet utan inmatning från, eller ens avisering till, de appar som påverkas mest av strypning. Om enhetens resurser är för ansträngda kommer de flesta enheter att strypa CPU- och GPU-hastigheterna på bekostnad av ditt spels prestanda. Det finns inget du som spelutvecklare egentligen kan göra åt det förutom att varna användaren innan de ändrar några inställningar om den potentiella inverkan deras ändringar kan ha på prestanda.
Med det nya Thermal API i Android Q kan appar dock ta emot callbacks för olika stadier av prestandatrottling - vilket ger utvecklare chansen att hjälpa till att minska belastningen på enheten genom att minska på aktiviteter som kräver betydande CPU, GPU eller modem användande. Till exempel kan ett spel dynamiskt minska upplösningen tills enheten inte längre är GPU-strypning, eller så kan en Maps-app inaktivera förbättrade funktioner som förstärkt verklighetsnavigering för att minska belastningen på processorn.
För att använda detta nya API registrerar appar en lyssnare i PowerManager (addThermalStatusListener) och systemet skickar en av följande termiska statuskoder till appen:
- THERMAL_STATUS_NONE: "Inte under strypning."
- THERMAL_STATUS_LIGHT: "Lätt strypning där UX inte påverkas."
- THERMAL_STATUS_MODERATE: "Måttlig strypning där UX inte påverkas till stor del."
- THERMAL_STATUS_SEVERE: "Svår strypning där UX till stor del påverkas."
- THERMAL_STATUS_CRITICAL: "Plattformen har gjort allt för att minska strömmen."
- THERMAL_STATUS_EMERGENCY: "Nyckelkomponenter i plattformen stängs av på grund av termiskt tillstånd. Enhetens funktionalitet kommer att vara begränsad."
- THERMAL_STATUS_SHUTDOWN: "Behöver stängas av omedelbart.
Stöd för Thermal API kräver givetvis Android Q, men ett annat krav är tillägget av en ny HAL. Google säger att Pixel-enheterna på Android Q (vilket betyder Pixel, Pixel XL, Pixel 2, Pixel 2 XL, Pixel 3, Pixel 3 XL, Pixel 3a, och Pixel 3a XL) stöder Thermal API, men Google arbetar med att lägga till stöd för andra enheter.
Läs mer om Termiskt API här.