Rufen Sie den Anwendungsnamen vom Paketnamen ab


82

Ich möchte den Anwendungsnamen vom Anwendungspaketnamen erhalten. Bitte zeigen Sie mir, wie ich das bekommen kann.

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());
        }
    }
}

Antworten:


196

Sie können PackageManagerclass verwenden, um Folgendes zu erhalten 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)");

Dies würde den Anwendungsnamen zurückgeben, wie er im <application>Tag seines Manifests definiert ist.


1
das ist perfekt. Ich habe stundenlang danach gesucht, danke Xion. : D
Drulabs

3
Es gibt mich immer wieder unbekannt zurück, wenn ich bereits einen Paketnamen habe. Ich möchte nur den Namen vom Paketnamen wissen
nida

Dies funktioniert nicht, wenn ich dies im globalen Empfänger verwende
Ziv Kesten

Nach PACKAGE_REMOVED können Sie keine applicationInfo eines Pakets erhalten.
John61590

perfekt .. einfach kopieren einfügen .. erledigt die Arbeit. Danke.
ABHIMANGAL MS

36

Versuche dies

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

und durch packageNameden vollständigen Namen Ihres Pakets ersetzen .

Sie können packageName mit mContext.getPackageName()where mContext = yourActivityName.thisfor Activity und getActivity () für fragment abrufen.


12
 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 "";
    }
}

3

Es scheint, dass Sie in der Lage sind, das Ereignis eines neuen Pakets zu erhalten, das danach hinzugefügt wurde. Es ist ein sehr einfaches Konzept, um alle relevanten Informationen über dieses Paket zu erhalten, so wie eine solche Information der Anwendungsname ist, also hier ist das Konzept

-> Ihr Gerätepaket-Manager verfügt über alle zugehörigen Informationen. Machen Sie einfach ein Objekt daraus, damit Sie alle Informationen zum Paketnamen erhalten.

-> Sie sollten sich auch daran erinnern, dass die Absicht Ihnen "package: real_package_name" gibt, sodass Sie zuerst einen echten Namen durch Verschütten (ich habe ihn verwendet) oder durch eine andere einfache Implementierung von String erhalten müssen

-> Hier ist der Code. Ich hoffe, Sie bekommen, was Sie wollen. Ich gebe auch Informationen darüber, wie Sie den App-Namen, das App-Symbol, die App-Version, den App-Versionscode usw. erhalten können.

    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());
             }
         }
      }
   }    
}

Zum Zeitpunkt der Deinstallation der Anwendung können Sie jedoch nur den Paketnamen abrufen, da bei der Deinstallation alle anderen Informationen vom System entfernt werden.


intent.getData (). toString () ist nicht der richtige Weg, die Daten in der Absicht sind strukturiert.
Olaf Achthoven

-2
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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.