Android Q legger til et nytt API for å ta opp den interne lydutgangen fra en annen app og også for å overvåke enhetens temperatur.
Google gir, og Google tar bort. Hver ny Android-utgivelse introduserer mange nye APIer som enten forbedrer funksjonaliteten til eksisterende apper eller åpner opp nye kategorier av apper. På den annen side fjerner Google også tilgang til eller begrenser mulighetene til eksisterende APIer for å forbedre sikkerheten til Android-plattformen. Android Q-utgivelsen er ikke annerledes, og vi har allerede snakket mye om endringene i delt lagring, utklippstavletilgang, varsler og andre APIer. På årets Google I/O-utviklerkonferanse, Google annonserte nye API-er i Android Q som er spesielt interessante for brukere og mobilspillutviklere: AudioPlaybackCapture og Termiske APIer.
Ta opp lyden fra andre apper med AudioPlaybackCapture i Android Q
Mobilspill er en enorm bransje uten tegn til å bremse ned når som helst snart, spesielt i markeder som USA, Kina og India. Ettersom flere bruker tid på smarttelefonene sine for spill og sosiale medier, er det ingen overraskelse at folk ønsker å dele spillopplevelsene sine på nettet.
Android har støttet å ta skjermbilder siden begynnelsen, men opptak av videoer av skjermen har bare vært støttet siden Android 5.0 Lollipop med introduksjonen av MediaProjection API. Dessverre tillater ikke denne API-en tredjepartsapper å ta opp den interne lydutgangen i andre apper, tvinge tredjeparts skjermopptakere til å ta opp ekstern lyd fra enhetens mikrofon (s). OEM-er som Samsung og Huawei gi systemapper for å ta opp den interne lydutgangen under et skjermopptak, men den eneste måten for eiere av andre enheter å ta opp video- og lydutgang fra enhetene sine på riktig måte, er å kjøpe en tredjeparts tilbehør. Heldigvis introduserer Google endelig en måte i Android Q for tredjepartsapper å ta opp lyd fra andre apper.
AudioPlaybackCapture API er beskrevet av Google som analogen til skjermfangst, men for lydopptak. Selv om den eneste appen så langt som bruker API er Googles Direktetekst, et tilgjengelighetsverktøy som legger til bildetekster til enhver video som spilles av på enheten, API-ene dokumentasjonen sier at dens primære formål er å tillate streaming-apper å fange opp lydvesenet spilt av spill. Tenk på mobilspillere som streamer øktene sine til tjenester som Twitch eller YouTube. API-en er designet for å ikke påvirke lydforsinkelsen til appen hvis lyd fanges opp, noe som gjør den perfekt for spillopptak slik at lyd og video ikke blir desynkronisert.
I motsetning til de første dagene av Android, er Googles tilnærming til nye API-er mer forsiktig. AudioPlaybackCapture kan bare brukes hvis både appen hvis lyd blir tatt opp og appen som tar opp, oppfyller spesifikke krav. Her er et sammendrag av disse kravene:
- For at lyden til en app skal kunne fanges opp av en tredjepartsapp, må følgende krav være oppfylt:
- Appen må ha allowAudioPlaybackCapture enten satt til sann eller deaktivert i manifestet. (Det er som standard sant for apper som er målrettet mot Android Q, men kan angis manuelt for apper som er målrettet mot Android Pie.)
- Appen som produserer lyd må ha lydbruk av typen USAGE_MEDIA, USAGE_GAME eller USAGE_UNKNOWN.
- Politikken for lydopptak (setAllowedCapturePolicy) må settes til ALLOW_CAPTURE_BY_ALL. Denne policyen kan angis under kjøring, men avspillingen må startes på nytt for at policyendringen skal tre i kraft. Hvis ALLOW_CAPTURE_BY_SYSTEM er angitt, er det bare systemapper som kan ta opp lyden (men er begrenset i at de ikke kan lagre lyden, sende den til en tredjepartsapp eller ta opp ved > 16kHz 16-bit mono kvalitet.)
- For at en app skal ta opp lyd fra en annen app, må følgende krav være oppfylt:
- Appen må få frem MediaProjectionManager.createScreenCaptureIntent-ledeteksten, og brukeren må godta den.
- Appen må inneholde TA OPP LYD tillatelse.
- Appen må være i samme brukerprofil som appen hvis lyd skal tas opp.
- Appen må få frem MediaProjectionManager.createScreenCaptureIntent-ledeteksten, og brukeren må godta den.
Jeg kan tenke meg at de fleste spill vil tillate at lyden deres blir fanget opp av apper som bruker denne nye API-en, men det kan ta litt tid før spillene blir oppdatert for å støtte det. På den annen side, ikke forvent at noen musikk- eller videostreaming-apper støtter denne API-en for tredjeparter på grunn av problemer med lisensiering. Begrensningene som Google har pålagt hvis en app setter policyen for lydopptak til ALLOW_CAPTURE_BY_SYSTEM betyr at utviklere av musikk- og videostreaming-apper bør være i orden med å aktivere lydopptak av systemet for å forbedre tilgjengeligheten.
For å lese mer om AudioPlaybackCapture API i Android Q, sjekk ut denne siden.
Overvåking av struping med termisk API i Android Q
Termisk struping administreres nesten utelukkende av systemet uten inndata fra, eller til og med varsling til, appene som er mest berørt av struping. Hvis enhetens ressurser er for anstrengt, vil de fleste enheter strupe CPU- og GPU-hastighetene på bekostning av spillets ytelse. Det er ingenting du, som spillutvikler, virkelig kan gjøre med det, bortsett fra å advare brukeren før de endrer noen innstillinger om den potensielle innvirkningen endringene deres kan ha på ytelsen.
Med det nye Thermal API i Android Q kan apper imidlertid motta tilbakeringinger for ulike stadier av ytelsesregulering – noe som gir utviklere muligheten til å bidra til å redusere belastningen på enheten ved å trappe ned på aktiviteter som krever betydelig CPU, GPU eller modem bruk. Et spill kan for eksempel redusere oppløsningen dynamisk til enheten ikke lenger har GPU-struping, eller en Maps-app kan deaktivere forbedrede funksjoner som navigasjon med utvidet virkelighet for å redusere belastningen på CPU.
For å bruke denne nye API-en registrerer apper en lytter i PowerManager (addThermalStatusListener), og systemet sender en av følgende termiske statuskoder til appen:
- THERMAL_STATUS_NONE: "Ikke under struping."
- THERMAL_STATUS_LIGHT: "Lett struping der UX ikke påvirkes."
- THERMAL_STATUS_MODERATE: "Moderat struping der UX ikke påvirkes i stor grad."
- THERMAL_STATUS_SEVERE: "Alvorlig struping der UX i stor grad påvirkes."
- THERMAL_STATUS_CRITICAL: "Plattformen har gjort alt for å redusere strøm."
- THERMAL_STATUS_EMERGENCY: "Nøkkelkomponenter i plattformen stenges på grunn av termisk tilstand. Enhetsfunksjonaliteten vil være begrenset."
- THERMAL_STATUS_SHUTDOWN: "Trenger avslutning umiddelbart.
Støtte for Thermal API krever selvsagt Android Q, men et annet krav er tillegg av en ny HAL. Google sier at Pixel-enhetene på Android Q (som betyr Pixel, Pixel XL, Pixel 2, Pixel 2 XL, Pixel 3, Pixel 3 XL, Pixel 3a, og Pixel 3a XL) støtter Thermal API, men Google jobber med å legge til støtte for andre enheter.
Les mer om Termisk API her.