96 votes

obtenir le nom de l'application à partir du nom du paquet

Je veux obtenir le nom de l'application à partir du nom du paquet de l'application. Quelqu'un peut me montrer comment obtenir cela.

public class AppInstalledListener extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        String action = intent.getAction();
        if(action.equals("android.intent.action.PACKAGE_ADDED")){
            Logger.debug("DATA:"+intent.getData().toString());
        }
        if(action.equals("android.intent.action.PACKAGE_REMOVED")){
            Logger.debug("DATA:"+intent.getData().toString());
        }
        if(action.equals("android.intent.action.PACKAGE_REPLACED")){
            Logger.debug("DATA:"+intent.getData().toString());
        }
    }
}

216voto

Xion Points 11130

Vous pouvez utiliser PackageManager pour obtenir ApplicationInfo :

final PackageManager pm = getApplicationContext().getPackageManager();
ApplicationInfo ai;
try {
    ai = pm.getApplicationInfo( this.getPackageName(), 0);
} catch (final NameNotFoundException e) {
    ai = null;
}
final String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)");

Cela renverrait le nom de l'application tel que défini dans <application> de son manifeste.

1 votes

C'est parfait. Je l'ai cherché pendant des heures, merci Xion. :D

6 votes

Il me renvoie tout le temps des inconnues, j'ai déjà le nom du paquet mais je veux juste connaître le nom du paquet.

0 votes

Cela ne fonctionne pas lorsque je l'utilise dans le récepteur global.

46voto

Nepster Points 893

Essayez ceci

final String packageName = "my.application.package"
PackageManager packageManager= getApplicationContext().getPackageManager();
String appName = (String) packageManager.getApplicationLabel(packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA));

et remplacer packageName avec le nom complet de votre paquet.

vous pouvez obtenir nom du paquet en utilisant mContext.getPackageName()mContext = yourActivityName.this pour l'activité et getActivity() pour le fragment.

22voto

Nikunj Paradva Points 2234
 public static String getAppNameFromPkgName(Context context, String Packagename) {
    try {
        PackageManager packageManager = context.getPackageManager();
        ApplicationInfo info = packageManager.getApplicationInfo(Packagename, PackageManager.GET_META_DATA);
        String appName = (String) packageManager.getApplicationLabel(info);
        return appName;
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
        return "";
    }
}

3voto

Il semble que vous êtes en mesure de recevoir l'événement d'un nouveau paquet ajouté après cela c'est un concept très simple pour obtenir toutes les informations pertinentes sur ce paquet comme une telle information est le nom de l'application donc voici le concept

-> le gestionnaire de paquets de votre appareil contient toutes les informations qui s'y rapportent. Il suffit donc de créer un objet de ce type pour obtenir toutes les informations relatives au nom du paquet.

-> Vous devez également vous rappeler que l'intention vous donne "package : real_package_name" donc vous devez d'abord obtenir le vrai nom par spilling(j'ai utilisé) ou par toute autre implémentation simple de String

-> Voici le code en espérant que vous obtiendrez ce que vous voulez Je donne également des informations sur la façon dont vous pouvez obtenir le nom de l'application, l'icône de l'application, la version de l'application, le code de la version de l'application etc.....

    public class NewAppReciver extends BroadcastReceiver{

@Override
public void onReceive(Context context, Intent intent) {
    if(intent.getAction().equals("android.intent.action.PACKAGE_ADDED")){
    String[] a=intent.getData().toString().split(":");
    String packageName=a[a.length-1];

    List<PackageInfo> packageInfoList =          context.getPackageManager().getInstalledPackages(0);
    for (int i = 0; i < packageInfoList.size(); i++) {
        PackageInfo packageInfo = packageInfoList.get(i);
        if(packageInfo.packageName.equals(packageName)){
            String appName = packageInfo.applicationInfo.loadLabel(context.getPackageManager()).toString();
            String appVersion = packageInfo.versionName;
            int appVerCode = packageInfo.versionCode;
            Drawable app_icon = packageInfo.applicationInfo.loadIcon(context.getPackageManager());
             }
         }
      }
   }    
}

Mais au moment de la désinstallation de l'application, vous ne pouvez obtenir que le nom du paquet, car lors de la désinstallation, toutes les autres informations sont supprimées par le système.

0 votes

Intent.getData().toString() n'est pas la solution, les données de l'intention sont structurées.

-2voto

PackageManager pm = getPackageManager();

IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.MAIN");
filter.addCategory("android.intent.category.HOME");
filter.addCategory("android.intent.category.DEFAULT");

Context context = getApplicationContext();
ComponentName component = new ComponentName(context.getPackageName(), TestReplaceHomeAppActivity.class.getName());

ComponentName[] components = new ComponentName[] {new ComponentName("com.android.launcher", "com.android.launcher.Launcher"), component};

pm.clearPackagePreferredActivities("com.android.launcher");
pm.addPreferredActivity(filter, IntentFilter.MATCH_CATEGORY_EMPTY, components, component);

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