
In Android, è possibile recuperare le informazioni relative alle applicazioni installate tramite un componente di nome PackageManager.
Ne possiamo ottenere un riferimento mediante il Context con il metodo getPackageManager:
PackageManager pkg=getPackageManager();
La chiamata precedente funziona, come presumibile, a patto che ci si trovi in un’Activity o in un Service altrimenti è necessario ottenere un riferimento ad un Context ed invocare il metodo tramite questo.
La classe PackageManager è ricca di metodi che forniscono informazioni abbondanti in tempi brevi: vediamone alcuni.
Potremo avere l’elenco delle applicazioni installate nel dispositivo tramite:
List<ApplicationInfo> apps=pkg.getInstalledApplications(PackageManager.GET_META_DATA);
L’argomento PackageManager.GET_META_DATA è uno dei flag utilizzabili (nonchè combinabili tra loro) per poter meglio definire il tipo di ricerca che si vuole effettuare. Nello specifico, GET_META_DATA fornisce accesso ai metadati dell’applicazione. In alternativa, potremmo richiedere solo dati relativi alle app di sistema impiegando il flag MATCH_SYSTEM_ONLY.
Il risultato è una lista di oggetti ApplicationInfo ognuno dei quali raccoglie tutte le informazioni racchiuse nel nodo <application> del file AndroidManifest.xml di ciascuna applicazione.
ApplicationInfo contiene a sua volta dei flag – proprietà flags – che permettono di verificare alcune caratteristiche dell’applicazione. Per sapere, ad esempio, se l’app è installata dall’utente o se è un’applicazione di sistema basterà verificare se in flags è settato il bit FLAG_SYSTEM tramite l’operatore AND bitwise (l’oggetto app è di classe ApplicationInfo):
(app.flags&ApplicationInfo.FLAG_SYSTEM)==0
Se il controllo restituisce true significa che l’app in questione non è di sistema ma è stata installata dall’utente.
Altri metodi del PackageManager restituiscono un oggetto PackageInfo che offre le informazioni contenute nell’intero file AndroidManifest.xml, non solo nel nodo <application>.
Supponendo di avere installato un’app con package com.esempio.miaapp ne potremo recuperare le informazioni di package con
PackageInfo pi=null; try { pi=pkg.getPackageInfo("com.esmepio.miaapp", PackageManager.GET_META_DATA); } catch (PackageManager.NameNotFoundException e) { // gestione dell'eccezione }
dove la gestione dell’eccezione PackageManager.NameNotFoundException è obbligatoria.
Qui abbiamo visto solo un paio di esempi, caratterizzati tuttavia da una certa potenziale utilità, ci sono però molti altri metodi e flag da poter impiegare nelle nostre verifiche e, in questo, la documentazione ufficiale costituirà una ricca fonte di ispirazione.
Alla prossima!
No Responses to “Android: scopriamo tutto sulle nostre app con PackageManager”