Suggerimento rapido crea un riquadro Impostazioni rapide personalizzate per Android

Il pannello delle impostazioni rapide non ha bisogno di presentazioni per gli utenti Android. Usano gli interruttori che offre tutto il tempo per attivare e disattivare servizi come WiFi, Bluetooth e GPS. Nel corso degli anni, è cresciuto e migliorato così tanto che raramente è necessario aprire l'attuale impostazioni app in questi giorni.

Fino a poco tempo fa, il pannello delle impostazioni rapide era bloccato e gli utenti dovevano accontentarsi di una collezione di switch ampia, ma fissa, comunemente nota come tiles. Con il lancio di Android Nougat, però, non è più così. Gli utenti sono ora liberi di aggiungere, rimuovere e riorganizzare le tessere. Inoltre, come sviluppatore di app, puoi offrire le tue tessere personalizzate.

In questo suggerimento rapido, ti mostrerò come utilizzare l'API Tile Impostazioni rapide per creare una piastrella personalizzata da zero.

Prerequisiti

Prima di procedere, assicurati di avere quanto segue:

  • l'ultima versione di Android Studio
  • un telefono con Android Nougat o superiore 

1. Capire le piastrelle

In sostanza, le tessere sono semplicemente degli interruttori facilmente accessibili che gli utenti possono premere in qualsiasi momento, anche quando i loro dispositivi sono bloccati. Poiché non possono visualizzare nient'altro che un'icona e un'etichetta, possono essere utilizzati solo per azioni molto specifiche ma semplici.

Ogni tessera ha uno stato ad essa associato. Proprio come un interruttore del mondo reale, può essere in uno stato "on" o "off". Come puoi immaginare, una tessera accesa è più luminosa di una che non è attiva. Anche se devi gestire tu stesso lo stato della tua tessera, la piattaforma Android gestisce automaticamente la sua luminosità.

2. Creazione di un riquadro personalizzato

Per offrire una tessera personalizzata, la tua app deve disporre di un servizio che estenda il TileService classe.

classe MyTileService: TileService () 

Mentre menzioni il servizio nel manifest del progetto, devi assegnargli un'etichetta e un'icona, che verranno utilizzate entrambe per creare l'aspetto predefinito della tessera. Per darti un esempio realistico, creeremo ora una tessera che fa vibrare continuamente il dispositivo dell'utente finché è acceso. La sua etichetta sarà Tremare, e la sua icona sarà vibrazione, che è disponibile in Vector Asset Studio sotto il Notifica sezione.

Successivamente, è necessario aggiungere un filtro intent alla definizione del servizio in modo che possa rispondere a android.service.quicksettings.action.QS_TILE azione. Per assicurarti che possa essere lanciato solo dal sistema Android, devi proteggerlo anche con android.permission.BIND_QUICK_SETTINGS_TILE autorizzazione.

A questo punto, la definizione del servizio dovrebbe assomigliare a questa:

    

Questo è tutto il codice che ti serve per visualizzare un riquadro personalizzato. Se distribuisci la tua app ora e vai a modificare sezione del pannello delle impostazioni rapide, dovresti essere in grado di vedere la tua tessera nell'elenco delle tessere disponibili.


Trascinarlo e rilasciarlo vicino a uno dei riquadri predefiniti in modo da poterlo accedere più facilmente.

3. Inizializzazione della tessera

Devi aver notato che la nostra tessera è abbastanza luminosa. Questo perché non abbiamo ancora inizializzato il suo stato, e il sistema pensa che sia "attivo". Per cambiare il riquadro in modo che inizi nello stato disattivato quando l'utente lo aggiunge, puoi ignorarlo onTileAdded () gestore di eventi del servizio e impostare il stato proprietà del qsTile oggetto a Tile.STATE_INACTIVE.

Ogni volta che cambi lo stato, devi ricordarti di chiamare anche il updateTile () metodo in modo che l'aspetto della tessera cambi per adattarsi allo stato.

override fun onTileAdded () super.onTileAdded () // Stato di aggiornamento qsTile.state = Tile.STATE_INACTIVE // L'aggiornamento sembra qsTile.updateTile ()

Se esegui l'app ora, rimuovi il riquadro e aggiungilo di nuovo, dovresti vedere che è spento.

4. Aggiunta di un gestore di clic

In questo momento, non succede niente quando clicchi sulla tessera. Puoi cambiarlo sovrascrivendo il al clic() gestore di eventi del servizio.

All'interno del gestore eventi, puoi attivare e disattivare il riquadro alternando tra il Tile.STATE_ACTIVE e Tile.STATE_INACTIVE stati. Il seguente codice mostra come farlo con un semplice se altro dichiarazione:

override fun onClick () super.onClick () if (qsTile.state == Tile.STATE_INACTIVE) // Attiva qsTile.state = Tile.STATE_ACTIVE startVibrating () // TODO else // Disattiva qsTile.state = Tile.STATE_INACTIVE stopVibrating () // TODO // L'aggiornamento sembra qsTile.updateTile ()

5. Uso del vibratore

L'azione associata alla tessera dovrebbe iniziare non appena il tassello viene acceso e fermarsi non appena viene spento. Pertanto, oltre all'aggiornamento dello stato, il codice aggiunto nel passaggio precedente contiene chiamate a startVibrating () e stopVibrating () metodi.

Il startVibrating () metodo può usare il vibrare() metodo di Android vibratore classe per far vibrare il telefono. Il vibrare() metodo, tuttavia, si aspetta una durata fissa. Per assicurarti che il telefono vibri continuamente finché il riquadro è attivo, puoi chiamarlo all'interno di un ciclo, preferibilmente con una durata breve. Tale ciclo non può essere eseguito all'interno del thread dell'interfaccia utente, il thread utilizzato dal servizio tile per il gestore di eventi click.

Idealmente, qualsiasi operazione di lunga durata che si desidera avviare o arrestare il servizio tile deve essere inserita in un file IntentService esempio. Per fare in modo che questo tutorial sia breve, pensiamo ora di fare una coroutine.

Il seguente codice mostra come eseguire il ciclo all'interno di una coroutine creata usando il lanciare() costruttore di coroutine:

fun startVibrating () launch while (qsTile.state == Tile.STATE_ACTIVE) (getSystemService (Context.VIBRATOR_SERVICE) come vibratore) .vibrate (1000) // Vibrazione per un secondo // Attendi un secondo prima di vibrare di nuovo in ritardo (1000)

Anche se il ciclo precedente termina quando l'utente spegne la tessera, le vibrazioni possono durare per un secondo in più. Per fermarli immediatamente, puoi chiamare il Annulla() metodo del vibratore servizio all'interno del stopVibrating () metodo.

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

La nostra tessera personalizzata è pronta. Tuttavia, non funzionerà a meno che non abbia il permesso di usare il vibratore del telefono. Puoi richiederlo aggiungendo la seguente riga al file manifest del tuo progetto:

Se si distribuisce l'app ora e si fa clic sul riquadro personalizzato, il telefono dovrebbe iniziare a vibrare. Cliccando di nuovo su di esso, dovresti essere in grado di fermare immediatamente le vibrazioni.

Conclusione

Se stai costruendo un'app che offre funzionalità o informazioni uniche, gli utenti avranno bisogno di accedere molto spesso, offrendo un riquadro personalizzato che può migliorare notevolmente l'esperienza dell'utente. In questo tutorial, hai visto quanto è facile creare una tessera del genere usando l'API delle tessere Impostazioni rapide.

Per saperne di più, fai riferimento alla documentazione ufficiale.

E mentre sei qui, dai uno sguardo ad alcuni dei nostri altri post sullo sviluppo di app per Android!