
Retroscena
Tasker: l'app che può fare davvero di tutto
di Dominik Bärlocher
Il lettore Kurt chiede: come posso riprodurre la musica in auto con Tasker? Quello che era iniziato come un innocuo piccolo esperimento ha portato a un vortice di tecnologia vecchio stile e Bleeding Edge.
E-mail del lettore Kurt: Non vuole più dover attivare manualmente ogni volta il lettore audio del suo tablet in auto. La sua routine in auto è sempre la stessa: entrare, accendere l’auto, attivare il poweramp sul suo FCC Launcher, partire.
Il mio obiettivo è che quando la radio si avvia, il tasker avvia Poweramp allo stesso tempo.
Il problema è facilmente risolvibile. In parte. Perché dove le applicazioni Android funzionano sempre allo stesso modo, l'industria automobilistica non si è ancora accordata sugli standard. Le auto costruite prima del 2016 non hanno ancora installato un'interfaccia per Android Auto. Le auto più recenti hanno il proprio software, che deve essere prima istruito a passare ad Android Auto.
Se hai a che fare con smart tech importata dalla Cina, è probabile che non si tratti di Android Auto, ma del FCC Launcher. Ci sono ragioni legali per questo, in quanto Google e i suoi servizi sono censurati o proibiti in Cina. Ecco perché hai cose come il coso tablet di Kurt dalla Cina, che sostituisce la sua autoradio. Oppure un cellulare, o un tablet. In altre parole: ci sono una miriade di variabili che non si adattano esattamente alla tua smart tech o alla tua auto.
Ma il fatto è che Android è Android e rimane Android. Quindi tralascio le peculiarità delle auto e dei Launcher russi e mi concentro sull'automazione con un'applicazione: Tasker.
Se poni la domanda: «Tasker può...» ti interrompo dopo sole due parole e ti rispondo: «Sì». Fondamentalmente Tasker può fare tutto. La domanda è solo: «Come?». Perché, sebbene Tasker offra molte opzioni fuori dagli schemi, spesso dobbiamo interagire con interfacce di programmi stranieri, chiamate API.
Tasker lavora sempre secondo lo stesso schema: Se, allora. O nel linguaggio di programmazione: if/then. In altre parole, se si verifica l'evento software A, Tasker eseguirà l'automatismo B.
Tasker è quindi anche il fulcro del progetto attuale. Per quanto riguarda l'hardware, faccio un test con le seguenti apparecchiature:
Sul lato software utilizzo le seguenti applicazioni. Ho acquistato le app e lavoro con la versione a pagamento:
Dopo aver terminato il lavoro di programmazione, provo i setup su due veicoli:
I veicoli sono selezionati in modo che siano il più possibile diversi tra loro in termini di software. Con la Ford posso collegare il tablet o lo smartphone e lavorare con Android Auto. Con la Dodge, devo combattere con UConnect. Il software non è da buttare via, ma non è stato aggiornato da anni e quindi mancano le interfacce moderne.
In questo progetto automatizzerò la riproduzione musicale di Poweramp o Spotify in ogni auto più o meno moderna, con un sistema audio più o meno intelligente. Hai bisogno di un'auto che possa riprodurre la musica via Bluetooth dal tuo telefono o accedere ad Android Auto con un cavo.
In questo progetto terrò conto anche della sicurezza alla guida. Ciò è particolarmente importante per la connessione Bluetooth tra auto e smart device. L’idea è chiara. L'interazione con il telefono o il tablet dovrebbe essere ridotta al minimo.
Prima di lasciarci andare, abbiamo bisogno di comprensione. Vale a dire, dobbiamo decifrare la magia nera del software per auto, e acquisire una certa comprensione meccanica delle auto. Perché nel contesto del funzionamento di Taskers, dobbiamo trovare il profilo, cioè l'affermazione «if» nell’«if/then». Per questo dobbiamo capire ciò che succede esattamente con l’auto, perché l’«If» proviene dall’auto.
È possibile equipaggiare una vecchia auto con chiave di accensione con un moderno sistema audio. Quando il motore è spento, non viene fornita alimentazione a nessun sistema. L'orologio può essere digitale, poi c'è una piccola batteria. Ma anche con un orologio analogico: batteria.
Quando si gira la chiave di accensione, si arriva prima all'ACC. Questa è la modalità di alimentazione che alimenta l'elettronica dell'auto con l'energia della batteria. Segue la modalità ON, dove viene acceso il motore. Tra ACC e ON, il flusso di corrente verso il sistema audio viene nuovamente interrotto, poiché la corrente viene utilizzata per avviare il motore.
La Dodge Charger funziona in modo diverso. Ma l'accensione e l'interazione del motore con l'elettronica di bordo funzionano esattamente allo stesso modo. Nessuna alimentazione a motore spento, alimentazione e avviamento tramite accensione.
Non posso controllare il sistema audio via cavo. Almeno non in modo utile. Il modo più sensato e semplice è via Bluetooth. Non appena il computer dell'auto si è avviato, si collega al dispositivo intelligente via Bluetooth – quindi o al tuo smartphone o al tuo tablet. Ora posso fare telefonate e utilizzare l'auto come una sorta di altoparlante Bluetooth tramite sorgente audio. La differenza rispetto a un normale altoparlante Bluetooth è trascurabile.
Quando si avvia la Ford, il computer si avvia con l'accensione. Quando il motore è spento, al computer non viene fornita alimentazione. Altrimenti la batteria si scaricherebbe di notte. La bestia di 2,8 tonnellate non andrebbe da nessuna parte il giorno dopo. Un minicomputer è fornito di alimentazione, che essenzialmente ricorda l'ora.
Dopo l'accensione e l'avvio del computer, devo accendere manualmente Android Auto sullo schermo. Un'icona sul touch screen. Una volta che ho premuto questa icona, il software dello smartphone prende il comando e lo visualizza sullo schermo dell’auto.
Da queste tre funzioni possiamo leggere tre diverse affermazioni «If». Se vuoi copiare uno di questi progetti, puoi semplicemente cercare il profilo e il suo numero, cioè «Profile #1» o qualcosa del genere, tramite CTRL/⌘+F.
Questi vengono definiti nel Profile Screen. Dovrebbe apparire sullo schermo per impostazione predefinita quando si avvia Tasker.
A questo seguono due task:
Puoi trovarlo in una scheda sul lato destro del Profile Screen
Ma con i cosiddetti Entry task non abbiamo ancora finito. È qui che subentra l’Exit task. Questo assicura che dopo aver parcheggiato l'auto, la musica passa allo smart device con batteria e continua ad andare.
Sia i profili che i task possono essere modificati e non servono solo per l'uso in auto. Profile #2 funziona con qualsiasi altoparlante Bluetooth, ad esempio.
In termini di flusso di lavoro, conviene definire prima i task e poi i profili. Non è una legge, ma nel corso degli anni di lavoro con Spotify è diventato un luogo comune.
Più avanti in questo articolo, Poweramp e le sue impostazioni diventeranno importanti. In questo articolo l’ho reso abbastanza semplice. Ho copiato circa 60 file MP3 dal mio hard disk nella cartella «Music» del sistema Android.
Dopo di che ho raggruppato tutte le canzoni in una playlist e l'ho chiamata «001». Questo perché sarà più facile in seguito nella costruzione del nostro automatismo, se non ci sono spazi all’interno del nome. Quindi «Canzoni per quando piove» è meno adatto. In tedesco, ad esempio («Gute Lieder für Regenwetter»), oltre agli spazi ci sarebbero anche caratteri speciali. Se vuoi che il nome della playlist si riferisca a pioggia e musica, ti consiglio di scriverlo «CanzoniPerQuandoPiove» o anche «CanzoniPioggia».
In una vecchia auto con un sistema audio che permette il collegamento allo smartphone o al tablet via USB, possiamo impostare il profilo in questo modo: la musica viene riprodotta non appena il dispositivo intelligente rileva la presenza di un’alimentazione.
Questa è di gran lunga la versione più semplice dell’«If» di queste istruzioni. Perché d'ora in poi incorporeremo gradualmente più variabili e conoscenze programmatiche.
I profili e i singoli task possono essere esportati. Puoi importare questa sintassi nella tua app Tasker. In Tasker appare così:
Profile: Poweramp_on (5)
Restore: no
State: Power [ Source:Any ]
In un veicolo semi-smart, è possibile collegare il dispositivo intelligente al sistema audio via Bluetooth. Manca tuttavia una completa integrazione nel software del veicolo. Al momento della connessione, il veicolo trasmette un identificatore univoco, il nome della connessione Bluetooth con un indirizzo Bluetooth nel formato 00:11:22:33:FF:EE. La Dodge Charger si identifica con l'identificatore «UConnect».
È possibile estendere il profilo a qualsiasi connessione Bluetooth, ma ciò non è pratico dato il gran numero di dispositivi Bluetooth. Non vuoi che parta la musica quando colleghi il tuo Smartwatch al telefono.
In questo modo la musica verrà riprodotta solo quando si collega lo smartphone alla macchina. Questo innesco funziona solo su questa Dodge, perché l'indirizzo è unico. Quindi, se vuoi la stessa funzione per un'altra auto, devi duplicare il profilo e adattare il nome della connessione.
Profile: Poweramp_bt_direct (18)
Restore: no
State: BT Connected [ Name:SRS-XB31 Address:00:11:22:33:FF:EE ]
In una smart car, Android Auto non si attiva finché non si dice al dispositivo intelligente o all'auto di attivarsi. Nella Ford F-150 è un'icona sullo schermo. In altre auto il comando può provenire dal cellulare.
Android Auto non è così facile da identificare sullo smartphone o sul tablet. Perché l'app non è una vera e propria app dal punto di vista tecnologico. In sostanza, cambia semplicemente la visualizzazione sullo schermo in modo che sia ottimizzata per l'uso in auto. Ma non appena qualcosa cambia su un sistema Android, qualcosa viene regolato in background. Nel caso di Android Auto si tratta di una variabile.
%UIMODE
Questa variabile è impostata sul valore «car», se Android Auto è attivo. E questo è esattamente ciò che possiamo intercettare nella schermata dei Tasker Profile.
Tasker risponde così:
Profile: Poweramp_androidAuto (24)
Restore: no
State: Variable Value [ %UIMODE ~ car ]
FCC Launcher e Android Auto sono due applicazioni. Le icone sono molto simili, ma FCC funziona anche senza Android Auto e viceversa. Pertanto, se un setup è in esecuzione su FCC Launcher – Ciao, Kurt! –, allora l'applicazione deve essere intercettata separatamente. Questo è anche un po' più facile che monitorare le variabili di Android: FCC Launcher non è così profondamente integrato in Android, resta in superficie. Siamo di nuovo in Profile Screen:
Profile: Poweramp_fcc (25)
Restore: no
Application: FCC Launcher
Ci siamo occupati delle varianti probabilmente più utilizzate per l'avviamento di un'auto. E se hai un’altra app o una variabile a cui Tasker dovrebbe prestare attenzione, sai come fare. Non è difficile.
Poweramp ha un'interfaccia di programma aperta, chiamata API. Possiamo indirizzare direttamente questa API e passare i comandi all’applicazione, senza dover coinvolgere l'interfaccia utente grafica. In FCC Launcher vedrai l'album in un grande cerchio, ma non dovrai più interagire direttamente con il software.
Tuttavia, aggiungiamo un modificatore: un periodo di attesa. È necessario perché una connessione Bluetooth richiede un certo tempo per trattare le impostazioni di output audio. Il tempo di attesa è utile anche con una connessione cablata, in quanto consente di saltare il falso avvio del sistema audio in modalità ACC durante il normale avvio del motore e la musica non inizierà a suonare finché il motore non sarà in funzione.
Per questo task passiamo alla schermata dei task in Tasker. Ed è qui che diventa davvero fico:
Qui devo fare un passo indietro. Un Intent è un comando che inviamo direttamente alle API Poweramps. È abbastanza complesso da descrivere. Perciò: un piccolo intermezzo.
Poweramp consente di inviare comandi all'app da Tasker. Per questo dobbiamo compilare tre righe nel Tasker Task Screen «Send Intent». Puoi ignorare il resto delle righe sullo schermo. Almeno per questo progetto.
Nella riga «Action», quella più in alto, diciamo a Tasker dove si trova l'API e che dovrebbe parlargli. Per questo motivo, inseriamo quanto scritto di seguito:
com.maxmpz.audioplayer.API_COMMAND
Con «com.maxmpz.audioplayer» ci rivolgiamo all'applicazione Poweramp. È il nome di sistema interno di Poweramps. «API_COMMAND» è la parte che dice a Poweramp: «Ora arriva un comando che puoi eseguire».
Nella riga «Data» dobbiamo dire a Poweramp che l'app deve funzionare con la playlist, nominata 001 in precedenza. Perciò scriviamo:
content://com.maxmpz.audioplayer.data/playlists/001/files
Se la playlist si chiamasse «CiaoKurt», ci sarebbe scritto
content://com.maxmpz.audioplayer.data/playlists/CiaoKurt/files
Con questo diciamo a Poweramp che vogliamo parlare con una playlist e i suoi file in Poweramp. Quindi Tasker ora sa che vogliamo parlare con Poweramp e Poweramp sa che vogliamo parlare con la playlist «001» e i suoi file.
Da qui possiamo dare direttamente i comandi alla playlist. Maxim Petrov, l'unico sviluppatore di Poweramps, ha reso pubblici i comandi.
1 Play/Pause
2 Pause
3 Resume
4 Next
5 Previous
6 Next Category
7 Previous Category
8 Repeat
9 Shuffle
10 Start Fast Forward
11 End Fast Forward
12 Begin Rewind
13 End Rewind
14 Stop
15 Seek
16 Request Current Track Position
17 Sleep Timer
20 Open and Play
50 Set Equalizer Preset
51 Set Equalizer secondo lo String
52 Set Equalizer Band
53 Set Equalizer Enabled
100 Stop Service
200 Minimum Time in between Seeks
Dato che non vogliamo che venga riprodotta sempre la stessa canzone ogni volta che la musica si accende, attiviamo lo shuffle. Nella prima riga con la descrizione «Extra» si inserisce quanto segue:
cmd:9
Con questo Poweramp mescola le 60 canzoni, ma non le suona ancora. Per fare questo, nel secondo campo «Extra» scriviamo:
cmd:20
A Tasker serve un’ulteriore informazione. Ovvero che l’Intent va inviato al Service Nel campo «Target», più in basso sullo schermo, devi selezionare l'opzione «Service».
Finito. Freccia indietro fino a quando non si è tornati al Task Screen.
In Poweramp Syntax il tutto appare così:
Poweramp_play (4)
A1: Wait [ MS:0 Seconds:5 Minutes:0 Hours:0 Days:0 ]
A2: Send Intent [ Action:com.maxmpz.audioplayer.API_COMMAND Cat:None Mime Type: Data:content://com.maxmpz.audioplayer.data/playlists/001/files Extra:cmd:9 Extra:cmd:20 Extra: Package: Class: Target:Service ]
Con questo Intent, lo smart device riproduce una traccia casuale della playlist. In combinazione con il comando Wait di cui sopra, la musica parte dopo cinque secondi.
A differenza di Poweramp, possiamo parlare con Spotify molto più facilmente.
In Tasker appare così:
Spotify_play (22)
A1: Wait [ MS:0 Seconds:5 Minutes:0 Hours:0 Days:0 ]
A2: Media Control [ Cmd:Play [Simulated Only] Simulate Media Button:On Package/App Name:Spotify Use Notification If Available:Off ]
Se maneggi spesso con l'audio Bluetooth, allora conosci il problema del volume. I dispositivi Bluetooth hanno un proprio controllo del volume. Le cuffie Bluetooth hanno un proprio controllo del volume, che nel peggiore dei casi è indipendente dal controllo del volume dello smartphone. Questo può significare che il volume audio del telefono è a 5, ma l'autoradio deve essere alzata al massimo. Altrimenti non senti nulla. Inoltre, alcune autoradio hanno lo stupido effetto che a livelli di volume molto alti viene inserito un suono frusciante sotto la musica.
Alla guida è fastidioso nel migliore dei casi, e pericoloso nel peggiore. Ed è illegale smanettare con il cellulare mentre si guida. Così ho creato un task che trasforma il volume dei media del telefono al massimo volume, dopo un determinato trigger. Questo ci permette di controllare il volume della musica sul controller dell'auto.
Nel Task Screen:
Nell’Exit task, se si sceglie la versione Bluetooth, creerei un Media Volume Subtask che riporti il volume a 5 o giù di lì.
Poweramp_play_bt (16)
A1: If [ %BtConnected ~ 1 ]
A2: Wait [ MS:0 Seconds:5 Minutes:0 Hours:0 Days:0 ]
A3: Media Volume [ Level:15 Display:Off Sound:Off ]
A4: Send Intent [ Action:com.maxmpz.audioplayer.API_COMMAND Cat:None Mime Type: Data:content://com.maxmpz.audioplayer.data/playlists/001/files Extra:cmd:9 Extra:cmd:20 Extra: Package: Class: Target:Service ]
Con questo abbiamo finito la parte di riproduzione. Quello che manca ora è l'Exit task. È importante che la musica smetta di suonare quando si interrompe l'alimentazione, si disattiva Android Auto o si spegne la connessione Bluetooth. È possibile che Poweramp o Spotify o qualsiasi altra app, decida di continuare a riprodurre musica dal telefono o dal tablet. Possiamo impedirlo con un Exit task.
Nel Task Screen creiamo un nuovo task dal nome «poweramp_kill».
Poweramp_kill (8)
A1: Send Intent [ Action:com.maxmpz.audioplayer.API_COMMAND Cat:None Mime Type: Data: Extra:cmd:2 Extra: Extra: Package: Class: Target:Service ]
Spotify può essere interrotto, così come l’app viene avviata. Con la pressione simulata di un pulsante. Lo facciamo nel task «spotify_kill»
Spotify_kill (28)
A1: Media Control [ Cmd:Stop Simulate Media Button:On Package/App Name:Spotify Use Notification If Available:Off ]
Dopo aver definito i task, possiamo combinarli a piacimento. È molto semplice. Nel Profile Screen definisci la tua affermazione «if» . Quindi «Se Bluetooth è connesso» o «Se Android Auto è attivo» e poi aggiungi un task.
Voilà! Assicurati che il cursore del profilo sia acceso, e puoi salire in auto e il tutto funziona alla grande. Attenzione, se si lavora con Spotify, il tablet o il telefono devono essere online. Altrimenti è inutile.
La complessità di questo progetto non è necessariamente la parte che riguarda la riproduzione della musica, ma il corretto riconoscimento dei fattori ambientali che possiamo e dobbiamo tenere in considerazione. È proprio questo che mi piace tanto di Tasker. Dopo l’e-mail di Kurt ho pensato: «Ci metto dieci minuti», ma di fatto ho impiegato qualche ora. Gran parte del tempo l’ho passato ad analizzare e mettere in discussione i processi meccanici di un'auto. Così, il semplice avvio del veicolo è diventato un processo tecnologicamente complesso. Anche se la conoscenza è completamente inutile nella maggior parte dei casi, capisco di più dello svolgimento quotidiano.
Anche se all'inizio il progetto può sembrare travolgente e infinitamente complesso, una solida ricerca in anticipo rende finalmente le cose semplici. Grazie alla varietà di funzioni di Tasker, possiamo intercettare o manipolare praticamente qualsiasi cosa. È divertente. E alla fine semplifica enormemente la nostra vita.
Poi c'è l'importanza delle API e della loro documentazione pulita. È molto più facile interagire con Poweramp che con Spotify. Comandi complessi come shuffle e poi play possono essere gestiti facilmente, dove l'interazione con Spotify permette solo play/pausa.
Alla fine spero di aver creato soluzioni praticabili per il vostro caso d'uso. Il problema di Kurt è certamente risolto. E anche se il tuo caso non è coperto: spero di averti guidato con sicurezza nella giusta direzione.
Tasker ha questa funzione interessante con cui i profili possono essere esportati in formato XML. Li ho caricati sul mio account GitHub. Quindi sono gratuitamente a tua disposizione. Buon divertimento!
Puoi utilizzare e modificare i dati contenuti nei Repositories a tuo piacimento. Se ne fai qualcosa di figo, fammelo sapere.
Hai un altro progetto che non riesci a gestire? Fammelo sapere. Sono contento di metterci mano.
E questo è quanto. Divertiti e continua ad hackerare.
Giornalista. Autore. Hacker. Sono un contastorie e mi piace scovare segreti, tabù, limiti e documentare il mondo, scrivendo nero su bianco. Non perché sappia farlo, ma perché non so fare altro.