Android Q voegt een nieuwe API toe om de interne audio-uitvoer van een andere app op te nemen en ook om de apparaattemperatuur te controleren.
Google geeft en Google neemt weg. Elke nieuwe Android-release introduceert veel nieuwe API's die de functionaliteit van bestaande apps verbeteren of nieuwe categorieën apps openen. Aan de andere kant verwijdert Google ook de toegang tot of beperkt de mogelijkheden van bestaande API's om de beveiliging van het Android-platform te verbeteren. Bij de Android Q-release is dat niet anders, en we hebben al veel gesproken over de wijzigingen in gedeelde opslag, toegang tot het klembord, meldingen en andere API’s. Bij dit jaar Google I/O ontwikkelaarsconferentie heeft Google nieuwe API's in Android Q aangekondigd die vooral interessant zijn voor gebruikers en ontwikkelaars van mobiele games: de AudioPlaybackCapture en Thermische API's.
De audio van andere apps opnemen met AudioPlaybackCapture in Android Q
Mobiel gamen is een enorme industrie en er zijn geen tekenen van vertraging op korte termijn, vooral in markten als de VS, China en India. Nu steeds meer mensen tijd doorbrengen op hun smartphones voor gaming en sociale media, is het geen verrassing dat mensen hun game-ervaringen online willen delen.
Android ondersteunt het maken van schermafbeeldingen sinds het allereerste begin, maar het vastleggen van video's van het scherm wordt pas ondersteund sinds Android 5.0 Lollipop met de introductie van de MediaProjection-API. Helaas staat deze API niet toe dat apps van derden de interne audio-uitvoer in andere apps opnemen. waardoor schermrecorders van derden worden gedwongen externe audio-uitvoer van de microfoon van het apparaat op te nemen (S). OEM's zoals Samsung en Huawei bieden systeemapps om de interne audio-uitvoer op te nemen tijdens een schermopname, maar de enige manier voor eigenaren van andere apparaten om de video- en audio-uitvoer van hun apparaten correct op te nemen, is kopen A accessoire van derden. Gelukkig introduceert Google eindelijk een manier in Android Q voor apps van derden om de audio van andere apps op te nemen.
De AudioPlaybackCapture API wordt door Google beschreven als de analoog van schermopname, maar dan voor audio-opname. Hoewel de enige app tot nu toe die de API gebruikt, die van Google is Live ondertiteling, een toegankelijkheidstool die ondertiteling toevoegt aan elke video die op het apparaat wordt afgespeeld, de API's documentatie stelt dat het primaire doel is om streaming-apps in staat te stellen het audiowezen vast te leggen gespeeld door spelletjes. Denk aan mobiele gamers die hun sessies streamen naar diensten als Twitch of YouTube. De API is ontworpen om de audiolatentie van de app waarvan de audio wordt vastgelegd niet te beïnvloeden, waardoor deze perfect is voor het opnemen van gameplay, zodat de audio en video niet worden gedesynchroniseerd.
Anders dan in de begindagen van Android is Google’s benadering van nieuwe API’s voorzichtiger. AudioPlaybackCapture kan alleen worden gebruikt als zowel de app waarvan de audio wordt vastgelegd als de app die de opname uitvoert, aan specifieke eisen voldoen. Hier is een samenvatting van deze vereisten:
- Als de audio van een app moet worden vastgelegd door een app van derden, moet aan de volgende vereisten worden voldaan:
- In het manifest moet allowAudioPlaybackCapture zijn ingesteld op true of niet zijn ingesteld. (De standaardinstelling is True voor apps die Android Q targeten, maar kan handmatig worden ingesteld voor apps die Android Pie targeten.)
- De app die audio produceert, moet het audiogebruik van het type USAGE_MEDIA, USAGE_GAME of USAGE_UNKNOWN hebben.
- Het beleid voor het vastleggen van audio (setAllowedCapturePolicy) moet worden ingesteld op ALLOW_CAPTURE_BY_ALL. Dit beleid kan tijdens runtime worden ingesteld, maar het afspelen moet opnieuw worden gestart voordat de beleidswijziging van kracht wordt. Als ALLOW_CAPTURE_BY_SYSTEM is ingesteld, kunnen alleen systeemapps de audio opnemen (maar zijn beperkt in dat ze de audio niet kunnen opslaan, doorgeven aan een app van derden of opnemen met > 16 kHz 16-bit mono kwaliteit.)
- Als een app audio van een andere app wil opnemen, moet aan de volgende vereisten worden voldaan:
- De app moet de MediaProjectionManager.createScreenCaptureIntent-prompt weergeven en de gebruiker moet deze accepteren.
- De app moet de GELUID OPNEMEN toestemming.
- De app moet zich in hetzelfde gebruikersprofiel bevinden als de app waarvan de audio wordt opgenomen.
- De app moet de MediaProjectionManager.createScreenCaptureIntent-prompt weergeven en de gebruiker moet deze accepteren.
Ik kan me voorstellen dat de meeste games toestaan dat hun audio wordt vastgelegd door apps die deze nieuwe API gebruiken, maar het kan enige tijd duren voordat games worden bijgewerkt om dit te ondersteunen. Aan de andere kant verwacht je niet dat muziek- of videostreaming-apps deze API voor derden ondersteunen vanwege problemen met licenties. De beperkingen die Google heeft opgelegd als een app het beleid voor het vastleggen van audio instelt op ALLOW_CAPTURE_BY_SYSTEM, betekenen echter dat ontwikkelaars van muziek- en videostreaming-apps zouden het goed moeten vinden om audio-opname door het systeem in te schakelen om de toegankelijkheid te verbeteren.
Voor meer informatie over de AudioPlaybackCapture API in Android Q, ga naar deze pagina.
Controle van de beperking met thermische API in Android Q
Thermische beperking wordt vrijwel volledig beheerd door het systeem, zonder input van of zelfs maar melding aan de apps die het meest door de beperking worden getroffen. Als de bronnen van het apparaat te zwaar worden belast, zullen de meeste apparaten de CPU- en GPU-snelheden beperken, wat ten koste gaat van de prestaties van je game. Je kunt er als game-ontwikkelaar niets aan doen, behalve de gebruiker waarschuwen voordat hij instellingen wijzigt over de mogelijke impact die zijn wijzigingen kunnen hebben op de prestaties.
Met de nieuwe Thermal API in Android Q kunnen apps echter callbacks ontvangen voor verschillende stadia van prestatiebeperking. ontwikkelaars de kans om de druk op het apparaat te helpen verminderen door activiteiten terug te dringen die een aanzienlijke CPU, GPU of modem vereisen gebruik. Een game kan bijvoorbeeld de resolutie dynamisch verlagen totdat het apparaat niet langer GPU-beperking heeft, of een Maps-app kan verbeterde functies uitschakelen, zoals augmented reality-navigatie om de belasting van de CPU te verminderen.
Om deze nieuwe API te gebruiken, registreren apps een luisteraar in PowerManager (addThermalStatusListener) en stuurt het systeem de app een van de volgende thermische statuscodes:
- THERMAL_STATUS_NONE: "Niet onder beperking."
- THERMAL_STATUS_LIGHT: "Lichtbeperking waarbij de UX niet wordt beïnvloed."
- THERMAL_STATUS_MODERATE: "Gematigde beperking waarbij UX niet grotendeels wordt beïnvloed."
- THERMAL_STATUS_SEVERE: "Ernstige beperking waarbij UX grotendeels wordt beïnvloed."
- THERMAL_STATUS_CRITICAL: "Platform heeft er alles aan gedaan om het stroomverbruik te verminderen."
- THERMAL_STATUS_EMERGENCY: "Belangrijke componenten in het platform worden uitgeschakeld vanwege thermische omstandigheden. De apparaatfunctionaliteiten zullen beperkt zijn."
- THERMAL_STATUS_SHUTDOWN: "Ik moet onmiddellijk afsluiten.
Ondersteuning voor de Thermal API vereist uiteraard Android Q, maar een andere vereiste is de toevoeging van een nieuwe HAL. Google zegt dat de Pixel-apparaten op Android Q (dat wil zeggen de Pixel, Pixel XL, Pixel 2, Pixel 2 XL, Pixel 3, Pixel 3 XL, Pixel 3a, En Pixel 3a XL) ondersteunen de Thermal API, maar Google werkt aan het toevoegen van ondersteuning voor andere apparaten.
Lees meer over de Thermische API hier.