DevCorner: filtriamo gli URL per avviare l'app

Roberto Orgiu
Roberto Orgiu
DevCorner: filtriamo gli URL per avviare l'app

Tutti noi abbiamo visto almeno un'app avviarsi alla pressione su un determinato link ma, probabilmente, non abbiamo mai guardato quello che si nasconde dietro questo comportamento. La tecnologia che ci permette di avere questo comportamento prende il nome di URL Scheme ed è composta, principalmente, da alcuni Intent-Filter creati appositamente nell'AndroidManifest dell'applicazione.

LEGGI ANCHE: Capire la direzione del dispositivo tramite l'accelerometro

Iniziamo con l'analizzare il filtro che viene inserito nell'Activity che si intende lanciare tramite URL

<intent-filter>
<data android:scheme="http" android:host="www.androidworld.it" android:path="/"/>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>

Alla riga 2, tramite il tag data, viene scelto il protocollo (http), l'host (www.androidworld.it) e il path (/) che avvieranno l'applicazione: in questo caso, si filtrerà l'indirizzo di questo blog e, alla pressione su un link che porta ad AndroidWorld.it, verrà chiesto se avviare il software in questione oppure il browser.

Passando alla riga successiva, noteremo l'azione (VIEW) e le categorie (DEFAULT e BROWSABLE) che servono per far partire correttamente il software ogniqualvolta viene inserito un URL che rientri nel pattern dello schema.

Volendo fare un ulteriore passo avanti, si può pensare di implementare un metodo Java che filtri i dati in ingresso, in modo da modificare il comportamento dell'Activity a seconda dei parametri presenti nell'URL.

Prendiamo quindi l'Uri contenente i parametri dell'Intent che ha lanciato l'applicazione:

Uri uri = getIntent().getData();

Successivamente, dovremo controllare che il suddetto Uri non sia nullo, verificando così che la nostra applicazione si stata lanciata da un indirizzo nel formato atteso

if(null == uri) return;

Verificata quindi la validità della stringa di ingresso, possiamo interrogare l'Uri e prelevare il dato necessario, utilizzando nel regolare flusso dell'app

String notizia = uri.getQueryParameter("news");

Se volete provare sul vostro terminale l'applicazione relativa a questo DevCorner, controllarne i sorgenti o chiedere aiuto in merito, basta fare un salto sull'apposito thread del nostro forum.