DevCorner: usiamo il DownloadManager di Android

Roberto Orgiu
Roberto Orgiu
DevCorner: usiamo il DownloadManager di Android

Questo non è il primo tutorial sullo sviluppo che scriviamo, ma questo pezzo segna in qualche modo un punto di svolta: d'ora in poi la rubrica prenderà il nome di DevCorner e avrà cadenza settimanale, con pubblicazione ogni martedì sera. Divideremo questi articoli principalmente in due filoni: il primo, quello cui siete più abituati, esplorerà i suggerimenti e i consigli, le cose più strane o quelle che troviamo per caso girovagando per la rete, mentre il secondo gruppo avrà una connessione diretta e ogni articolo sarà la continuazione del precedente; abbiamo infatti deciso di creare una sorta di "corso", in cui partiamo dal concetto di Activity ed esploriamo mano a mano tutte le componenti delle applicazioni Android.

Finita l'introduzione, iniziamo subito con l'argomento di questa prima puntata.

Come ben sappiamo, il nostro robottino è fornito di un comodo download manager che ci permette di scaricare i file dal web, osservandone il progresso direttamente dalla nostra barra delle notifiche: utilizzarlo è davvero semplice e comporta la stesura di pochissime righe di codice.

Per prima cosa, occupiamoci di come richiedere la risorsa che ci serve e renderla visibile nella UI dei download:

DownloadManager.Request r = new DownloadManager.Request(Uri.parse(url));
r.setVisibleInDownloadsUi(true);

A questo punto, dobbiamo solamente istanziarci il nostro DownloadManager, che utilizzeremo sia per iniziare il download sia per annullarlo:

DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);

Le API dell'oggetto in questione sono molto comode per le due operazioni che dobbiamo compiere, in quanto la chiamata al download prende in ingresso la Request creata poc'anzi e ci restituisce l'id (long) dell'operazione, che passeremo poi come parametro alla chiamata di rimozione per cancellare lo scaricamento.

Mettiamo quindi in coda il nostro file

long id = dm.enqueue(r);

E annulliamolo

dm.remove(id);

Come possiamo vedere, l'implementazione è davvero immediata e richiede che nel nostro Manifest vengano dichiarati i permessi per l'accesso ad internet e alla memoria fisica: andiamo quindi ad incollare le seguenti stringhe nel nostro XML e il gioco è fatto

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Se volete dare uno sguardo ai sorgenti o volete provare l'APK direttamente sul vostro dispositivo, trovate i link sul thread del nostro forum.

Buona programmazione a tutti!