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

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.

Xion
quelle
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.

AndroidGeek
quelle
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 "";
    }
}
Nikunj Paradva
quelle
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.

tanay khandelwal
quelle
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);

quelle