Sto lavorando su un'app in cui voglio presentare l'utente con tutte le app installate e lasciargli scegliere una e quindi fare qualcosa con esso. Ho seguito un tutorial (questo: http://impressive-artworx.de/2011/list-all-installed-apps-in-style/) anche se sto avendo alcuni problemi. Dopo aver seguito il tutorial ho ricevuto solo app che non erano preinstallate (come tutte le app in background che non sono lavabili), il che è fantastico se vuoi le app che l'utente ha scaricato dal Play Store. Il problema è che nella mia app voglio visualizzare le app di sistema pubblicabili come Youtube e Browser ma non quelle non lavabili come Search Application Provider.Filtra le app non riscritte quando ricevi tutte le app installate
Ecco il codice che sto usando quando per ottenere le applicazioni:
private List<App> loadInstalledApps(boolean includeSysApps) {
List<App> apps = new ArrayList<App>();
// the package manager contains the information about all installed apps
PackageManager packageManager = getPackageManager();
List<PackageInfo> packs = packageManager.getInstalledPackages(0); //PackageManager.GET_META_DATA
for(int i=0; i < packs.size(); i++) {
PackageInfo p = packs.get(i);
ApplicationInfo a = p.applicationInfo;
App app = new App();
app.setTitle(p.applicationInfo.loadLabel(packageManager).toString());
app.setPackageName(p.packageName);
app.setVersionName(p.versionName);
app.setVersionCode(p.versionCode);
CharSequence description = p.applicationInfo.loadDescription(packageManager);
app.setDescription(description != null ? description.toString() : "");
apps.add(app);
}
return apps;
}
Ora la mia domanda è; qual è il modo migliore per filtrare le app non pubblicabili?
Qualsiasi aiuto è apprezzato!
Questa non è una buona idea, perché alcune applicazioni ritorno nullo per getLaunchIntentForPackageName. Con questa soluzione ho avuto il problema che l'app "Telefonia" non era nell'elenco delle app. Per una soluzione migliore guarda qui: https://stackoverflow.com/a/30446616/4274651 – Janosch