3 votes

Android : Déterminer la catégorie des applications installées

Étant donné la liste des paquets installés sur un appareil Android, existe-t-il un moyen de trier les applications en catégories sans utiliser une liste autocompilée codée en dur des applications en catégories ?

Par exemple, si les applications installées sont Téléphone, Angry Birds et Messages, Téléphone et Messages pourrait être dans Communications et Angry Birds dans Jeux.

J'ai vu Comment obtenir une catégorie pour chaque application sur un appareil sous Android ? mais j'espère qu'une méthode a pu être mise au point depuis.

6voto

Gabe Sechan Points 23732

Non, parce que les applications n'ont pas de catégories. Les applications n'ont pas besoin d'être installées via google play, les catégories sur les autres magasins ne seront pas les mêmes. Il se peut qu'elles n'aient jamais été installées à partir d'un magasin pour commencer - je charge latéralement des applications tout le temps écrites par moi-même ou par des amis. Ce concept n'existe pas.

Sans parler du fait que les catégories de Google Play sont plutôt mauvaises : il est fréquent que les choses ne rentrent pas dans l'une ou l'autre catégorie, les descriptions sont vagues, et elles sont beaucoup trop larges : il faudrait au moins 2 ou 3 niveaux de sous-catégories pour les rendre à peu près utilisables.

0voto

Raghav Sood Points 43264

Il n'y a pas de changement au niveau de l'API depuis la dernière question.

Au mieux, vous pourriez récupérer le nom de chaque paquet et gratter la page Google Play. Toutefois, cette méthode échouera si l'application n'est pas présente sur Google Play.

0voto

Rishabh Jain Points 138

J'ai également rencontré le même problème. La solution à la question ci-dessus est indiquée ci-dessous.

Tout d'abord, téléchargez la bibliothèque Jsoup ou téléchargez le fichier jar.

ou Ajoutez ceci à votre build.gradle(Module : app) implémentation 'org.jsoup:jsoup:1.11.3'.

private class FetchCategoryTask extends AsyncTask {
private final String TAG = FetchCategoryTask.class.getSimpleName();
private PackageManager pm;

@Override
protected Void doInBackground(Void... errors) {
  String category;
  pm = getPackageManager();
  List<ApplicationInfo> packages = 
  pm.getInstalledApplications(PackageManager.GET_META_DATA);
  Iterator<ApplicationInfo> iterator = packages.iterator();
  //  while (iterator.hasNext()) {
  // ApplicationInfo packageInfo = iterator.next();
  String query_url = "https://play.google.com/store/apps/details? 
  id=com.imo.android.imoim";  //GOOGLE_URL + packageInfo.packageName;
  Log.i(TAG, query_url);
  category = getCategory(query_url);
  Log.e("CATEGORY", category);

  // store category or do something else
  //}
  return null;
 }
private String getCategory(String query_url) {
  try {
     Document doc = Jsoup.connect(query_url).get();
     Elements link = doc.select("a[class=\"hrTbp R8zArc\"]");
     return link.text();
      } catch (Exception e) {
    Log.e("DOc", e.toString());
     }
  }
} 

En retour, vous obtiendrez le nom de la société d'application et la catégorie de l'application.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X