[ANDROID] Comment récupérer la taille d'une application locale

Fermé
stagiaire_1 Messages postés 17 Date d'inscription mardi 7 mai 2013 Statut Membre Dernière intervention 14 juin 2013 - 21 mai 2013 à 10:51
scinarf Messages postés 1119 Date d'inscription samedi 18 novembre 2006 Statut Membre Dernière intervention 25 septembre 2014 - 24 mai 2013 à 14:06
Bonjour,

Je débute avec Java Android. Je cherche à récupérer la taille des applications installées sur mon AVD.

Voici le code que j'utilise actuellement :

private ArrayList<HashMap<String, String>> getInstalledApps(boolean getSysPackages) {
	    ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();    
	    HashMap<String, String> map;
	    List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);
	    for(int i=0;i<packs.size();i++) {
	        PackageInfo p = packs.get(i);
	        if (((p.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) != true)
	        {
	        	map = new HashMap<String, String>();
		        map.put("name", p.applicationInfo.loadLabel(getPackageManager()).toString());
		        map.put("packageName", p.packageName);
		        map.put("versionName", p.versionName);
		        map.put("versionCode", String.valueOf(p.versionCode));
		        map.put("installDate", millisToDate(p.firstInstallTime));
		        map.put("updateDate", millisToDate(p.lastUpdateTime));
		        map.put("img", String.valueOf(p.applicationInfo.icon));
		        list.add(map);
		        
		        Log.d("", "Nom de l'application : " + 
		        		p.applicationInfo.loadLabel(getPackageManager()).toString() + "\n" +
		        	    "Nom du package : " + p.packageName + "\n" +
		        	        		"Nom de la version : " + p.versionName + "\n" +
		        	    "Code de la version : " + String.valueOf(p.versionCode) + "\n" + "\n");
		        Log.d("",".");
	        }
	    }
	    return list; 
	}



Ce code me retourne la liste des informations de toutes les applications non-systèmes, donc que l'on peut désinstaller sans pour autant influencer le bon déroulement de l'émulateur.

Je souhaiterai récupérer la taille mémoire de chaque package, mais je ne trouve pas cet attribut dans la classe PackageInfo. J'ai aussi cherché sur la doc de PackageInfo mais je n'ai rien trouvé : https://developer.android.com/reference/android/content/pm/PackageInfo.html Existe t-il une autre classe qui puisse faire cela? Ou ais-je mal cherché dans les attributs?

En vous remerciant par avance.

A voir également:

1 réponse

scinarf Messages postés 1119 Date d'inscription samedi 18 novembre 2006 Statut Membre Dernière intervention 25 septembre 2014 252
24 mai 2013 à 14:06
Bonjour,

A ce jour, il n'est pas possible de récupérer la taille d'une package de manière conventionnelle, une méthode existe mais elle est déconseillée.

Voici le lien : https://stackoverflow.com/questions/1806286/getting-installed-app-size
De plus, pour utiliser cette technique, il vaut mieux avoir un bon niveau pour comprendre de quoi il retourne exactement.

Après on peut effectuer une modification dans votre code pour l'optimiser :

A la place de :

for(int i=0;i<packs.size();i++)
{
PackageInfo p = packs.get(i);
if (((p.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) != true)
....
...
}

Utilisez :

for( PackageInfo p : packs )
{
if (((p.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) != true)
....
...
}

Lire ceux-ci pour les optimisations sur les boucles : https://developer.android.com/training/articles/perf-tips.html

Pensez à définir un TAG dans votre programme à utiliser dans le Log pour récupérer ceux-ci sans chercher.
Genre : private final TAG = "MaListeApplication";

N'hésitez pas si vous avez d'autres questions, j'essaierai de vous répondre du mieux que je peux.
0