Snelle tip maak een aangepaste Quick Settings-tegel voor Android

Het paneel met snelle instellingen behoeft geen introductie voor Android-gebruikers. Ze gebruiken de schakelaars die ze de hele tijd kunnen gebruiken om diensten zoals WiFi, Bluetooth en GPS aan en uit te zetten. In de loop der jaren is het zo sterk gegroeid en verbeterd dat het zelden nodig is om het echte te openen instellingen app deze dagen.

Tot kort geleden was het deelvenster Snelle instellingen vergrendeld en moesten gebruikers tevreden zijn met een grote, maar vaste verzameling schakelaars, ook wel tegels genoemd. Met de lancering van Android Nougat is dat echter niet langer het geval. Gebruikers kunnen nu tegels toevoegen, verwijderen en herschikken. Bovendien kunt u als app-ontwikkelaar uw eigen aangepaste tegels aanbieden.

In deze snelle tip laat ik u zien hoe u de Quick Settings Tile API gebruikt om een ​​geheel eigen tegel te maken.

voorwaarden

Zorg voordat u verdergaat dat u over het volgende beschikt:

  • de nieuwste versie van Android Studio
  • een telefoon met Android Nougat of hoger 

1. Tegels begrijpen

In wezen zijn tegels eenvoudig toegankelijke switches die gebruikers op elk gewenst moment kunnen gebruiken, zelfs als hun apparaten vergrendeld zijn. Omdat ze niets meer dan een pictogram en een label kunnen weergeven, kunnen ze alleen worden gebruikt voor zeer specifieke maar toch eenvoudige acties.

Elke tegel heeft er een staat bij. Net als een switch uit de echte wereld, kan deze zich in de aan of uit-status bevinden. Zoals je zou verwachten, is een tegel die is ingeschakeld, helderder dan een tegel die uit is. Hoewel u zelf de status van uw tegel moet beheren, beheert het Android-platform automatisch de helderheid.

2. Een aangepaste tegel maken

Als u een aangepaste tegel wilt aanbieden, moet uw app een service hebben waarmee de extensie wordt uitgebreid TileService klasse.

class MyTileService: TileService () 

Terwijl u de service in het manifest van het project vermeldt, moet u deze een label en een pictogram geven, die beide zullen worden gebruikt om de standaardlook van de tegel te maken. Om u een realistisch voorbeeld te geven, maken we nu een tegel waarmee het apparaat van de gebruiker continu trilt zolang het apparaat is ingeschakeld. Het label zal zijn Beven, en het pictogram zal zijn vibratie, die beschikbaar is in de Vector Asset Studio onder de Kennisgeving sectie.

Vervolgens moet u een intentiefilter toevoegen aan de definitie van de service, zodat deze kan reageren op de android.service.quicksettings.action.QS_TILE actie. Om ervoor te zorgen dat het alleen door het Android-systeem kan worden gestart, moet u het ook beschermen met de android.permission.BIND_QUICK_SETTINGS_TILE toestemming.

Op dit punt zou de definitie van de service er als volgt uit moeten zien:

    

Dat is alle code die u nodig hebt om een ​​aangepaste tegel weer te geven. Als u uw app nu implementeert en naar de Bewerk sectie van het deelvenster met snelle instellingen, moet u uw tegel in de lijst met beschikbare tegels kunnen zien.


Sleep het en laat het in de buurt van een van de standaardtegels vallen zodat je er gemakkelijker bij kunt.

3. Initialiseren van de tegel

Je moet gemerkt hebben dat onze tegel redelijk helder is. Dat komt omdat we de staat nog steeds niet hebben geïnitialiseerd en het systeem denkt dat het "aan" is. Als u de tegel zodanig wilt wijzigen dat deze in de uit-status begint wanneer de gebruiker deze toevoegt, kunt u de tegel overschrijven onTileAdded () event handler van de service en stel de staat eigendom van de qsTile bezwaar tegen Tile.STATE_INACTIVE.

Telkens wanneer u de status wijzigt, moet u onthouden dat u ook de updateTile () methode zodat de aanblik van de tegel verandert om overeen te komen met de staat.

override fun onTileAdded () super.onTileAdded () // Update state qsTile.state = Tile.STATE_INACTIVE // Update lijkt qsTile.updateTile ()

Als u de app nu uitvoert, verwijdert u de tegel en voegt u deze opnieuw toe. U zou moeten zien dat deze is uitgeschakeld.

4. Een Click-handler toevoegen

Op dit moment gebeurt er niets wanneer je op de tegel klikt. U kunt dit wijzigen door de bij klikken() gebeurtenishandler van de service.

In de gebeurtenishandler kunt u de tegel in- en uitschakelen door af te wisselen tussen de Tile.STATE_ACTIVE en Tile.STATE_INACTIVE staten. De volgende code laat zien hoe je dit doet met een simpele if-else uitspraak:

negeer plezier onClick () super.onClick () if (qsTile.state == Tile.STATE_INACTIVE) // Schakel qsTile.state = Tile.STATE_ACTIVE startVibrating () // TODO else // QsTile.state uit = Tile.STATE_INACTIVE stopVibrating () // TODO // Update lijkt qsTile.updateTile ()

5. Gebruik van de vibrator

De actie die aan de tegel is gekoppeld, zou moeten beginnen zodra de tegel wordt aangezet en stoppen zodra deze is uitgeschakeld. Daarom bevat de code die we in de vorige stap hebben toegevoegd, naast het bijwerken van de status, oproepen naar de startVibrating () en stopVibrating () methoden.

De startVibrating () methode kan de trillen() methode van Android's Vibrator klas om de telefoon te laten trillen. De trillen() methode verwacht echter een vaste duur. Om ervoor te zorgen dat de telefoon continu trilt zolang de tegel aanstaat, kunt u deze binnen een lus noemen, bij voorkeur met een korte duur. Zo'n lus kan niet worden uitgevoerd binnen de UI-thread, de thread die de tile-service gebruikt voor zijn click event-handler.

Idealiter moet elke langlopende bewerking die u wilt dat uw tegelservice start of stopt, in een IntentService aanleg. Om deze tutorial kort te houden, laten we het voorlopig doen met een coroutine.

De volgende code laat zien hoe u de lus uitvoert in een coroutine die is gemaakt met de lancering() coroutine bouwer:

fun startVibrating () launch while (qsTile.state == Tile.STATE_ACTIVE) (getSystemService (Context.VIBRATOR_SERVICE) als Vibrator). vibrate (1000) // Trillen voor een seconde // Wacht een seconde voordat je opnieuw trilt (1000)

Hoewel de bovenstaande lus eindigt wanneer de gebruiker de tegel uitschakelt, kunnen de trillingen een extra seconde aanhouden. Om ze onmiddellijk te stoppen, kunt u bellen met annuleren() methode van de Vibrator service binnen de stopVibrating () methode.

fun stopVibrating () (getSystemService (Context.VIBRATOR_SERVICE) als Vibrator) .cancel ()

Onze aangepaste tegel is klaar. Het werkt echter alleen als het toestemming heeft om de vibrator van de telefoon te gebruiken. U kunt dit aanvragen door de volgende regel toe te voegen aan het manifestbestand van uw project:

Als je de app nu implementeert en op de aangepaste tegel klikt, begint je telefoon te trillen. Door er nog een keer op te klikken, moet je onmiddellijk de trillingen kunnen stoppen.

Conclusie

Als u een app bouwt die unieke functionaliteit of informatie biedt, hebben gebruikers zeer vaak toegang nodig. Als u een aangepaste tegel aanbiedt, kan de gebruikerservaring aanzienlijk verbeteren. In deze zelfstudie zag u hoe eenvoudig het is om een ​​dergelijke tegel te maken met behulp van de Quick Settings Tile API.

Raadpleeg de officiële documentatie voor meer informatie.

En terwijl je hier bent, bekijk enkele van onze andere berichten over de ontwikkeling van Android-apps!