{"id":12830,"date":"2018-01-04T08:51:07","date_gmt":"2018-01-04T07:51:07","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=12830"},"modified":"2018-01-04T08:51:07","modified_gmt":"2018-01-04T07:51:07","slug":"android-scopriamo-tutto-sulle-nostre-app-con-packagemanager","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/android-scopriamo-tutto-sulle-nostre-app-con-packagemanager\/","title":{"rendered":"Android: scopriamo tutto sulle nostre app con PackageManager"},"content":{"rendered":"<p>In Android, \u00e8 possibile recuperare le informazioni relative alle applicazioni installate tramite un componente di nome <strong>PackageManager<\/strong>.<br \/>\nNe possiamo ottenere un riferimento mediante il <em>Context<\/em> con il metodo <em>getPackageManager<\/em>:<\/p>\n<pre class=\"lang:java decode:true\">PackageManager pkg=getPackageManager();<\/pre>\n<p>La chiamata precedente funziona, come presumibile, a patto che ci si trovi in un&#8217;Activity o in un Service altrimenti \u00e8 necessario ottenere un riferimento ad un Context ed invocare il metodo tramite questo.<br \/>\nLa classe PackageManager \u00e8 ricca di metodi che forniscono informazioni abbondanti in tempi brevi:\u00a0vediamone alcuni.<br \/>\nPotremo avere l&#8217;<strong>elenco delle applicazioni installate<\/strong>\u00a0nel dispositivo tramite:<\/p>\n<pre class=\"lang:java decode:true\">List&lt;ApplicationInfo&gt; apps=pkg.getInstalledApplications(PackageManager.GET_META_DATA);<\/pre>\n<p>L&#8217;argomento PackageManager.GET_META_DATA \u00e8 uno dei<strong> flag utilizzabili<\/strong> (nonch\u00e8 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&#8217;applicazione. In alternativa, potremmo richiedere solo dati relativi alle\u00a0app di sistema impiegando il flag MATCH_SYSTEM_ONLY.<br \/>\nIl risultato \u00e8 una lista di oggetti <em>ApplicationInfo<\/em> ognuno dei quali raccoglie tutte le informazioni racchiuse nel nodo &lt;application&gt; del file AndroidManifest.xml di ciascuna applicazione.<\/p>\n<p><strong>ApplicationInfo contiene a sua volta dei flag<\/strong> &#8211; propriet\u00e0\u00a0<em>flags<\/em> &#8211; che permettono\u00a0di verificare alcune caratteristiche dell&#8217;applicazione. Per sapere, ad esempio, se l&#8217;app \u00e8 installata dall&#8217;utente o se \u00e8 un&#8217;applicazione di sistema baster\u00e0 verificare se in <em>flags<\/em> \u00e8 settato il bit FLAG_SYSTEM tramite l&#8217;operatore AND bitwise (l&#8217;oggetto app \u00e8 di classe ApplicationInfo):<\/p>\n<pre class=\"lang:java decode:true\">(app.flags&amp;ApplicationInfo.FLAG_SYSTEM)==0<\/pre>\n<p>Se il controllo restituisce <em>true<\/em> significa che l&#8217;app in questione non \u00e8 di sistema ma \u00e8 stata installata dall&#8217;utente.<\/p>\n<p>Altri metodi del PackageManager restituiscono un oggetto <strong>PackageInfo che offre le informazioni contenute nell&#8217;intero file AndroidManifest.xml<\/strong>, non solo nel nodo &lt;application&gt;.<br \/>\nSupponendo di avere installato un&#8217;app con package com.esempio.miaapp ne potremo recuperare le informazioni di package con<\/p>\n<pre class=\"lang:java decode:true\">PackageInfo pi=null;\r\ntry {\r\n  pi=pkg.getPackageInfo(\"com.esmepio.miaapp\", PackageManager.GET_META_DATA);\r\n} \r\ncatch (PackageManager.NameNotFoundException e) {\r\n  \/\/ gestione dell'eccezione\r\n}<\/pre>\n<p>dove la gestione dell&#8217;eccezione <em>PackageManager.NameNotFoundException<\/em> \u00e8 obbligatoria.<\/p>\n<p>Qui abbiamo visto solo un paio di esempi, caratterizzati tuttavia da una certa potenziale utilit\u00e0, ci sono per\u00f2 molti altri metodi e flag da poter impiegare nelle nostre verifiche e, in questo, la <a href=\"https:\/\/developer.android.com\/reference\/android\/content\/pm\/PackageManager.html\" target=\"_blank\" rel=\"noopener\">documentazione ufficiale<\/a>\u00a0costituir\u00e0 una ricca fonte di ispirazione.<br \/>\nAlla prossima!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Android, \u00e8 possibile recuperare le informazioni relative alle applicazioni installate tramite un componente di nome PackageManager&#8230;.<\/p>\n","protected":false},"author":561,"featured_media":13363,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1682,105],"tags":[1278,1882,1737,1881],"class_list":["post-12830","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","category-tips-tricks","tag-android","tag-androidmanifest","tag-creare-app-mobile","tag-packagemanager"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12830","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/561"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=12830"}],"version-history":[{"count":4,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12830\/revisions"}],"predecessor-version":[{"id":13364,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12830\/revisions\/13364"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/13363"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=12830"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=12830"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=12830"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}