pobierz nazwę aplikacji z nazwy pakietu

84

Chcę uzyskać nazwę aplikacji z nazwy pakietu aplikacji. Niech ktoś mi pokaże, jak mogę to zrobić.

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
źródło

Odpowiedzi:

196

Możesz użyć PackageManagerklasy, aby uzyskać 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)");

To zwróci nazwę aplikacji zdefiniowaną w <application>tagu jej manifestu.

Xion
źródło
1
to idealne. Szukałem go od wielu godzin, dzięki Xion. : D
drulabs
3
powraca do mnie nieznany cały czas. Mam już nazwę pakietu, chcę tylko znać nazwę z nazwy pakietu
nida
To nie działa, gdy używam tego w odbiorniku globalnym
Ziv Kesten
nie można uzyskać applicationInfo o pakiecie po PACKAGE_REMOVED.
John61590
doskonały ... po prostu skopiuj wklej ... wykonasz pracę. Dziękuję Ci.
ABHIMANGAL MS
37

Spróbuj tego

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

i zastąp packageNamepełną nazwą swojego pakietu.

możesz pobrać nazwę_pakietu za pomocą mContext.getPackageName()where mContext = yourActivityName.thisdla Activity i getActivity () dla fragmentu.

AndroidGeek
źródło
15
 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
źródło
3

Wygląda na to, że możesz otrzymać zdarzenie dodania nowego pakietu po tym, że jest to bardzo prosta koncepcja, aby uzyskać wszystkie istotne informacje o tym pakiecie, tak jak jedna taka informacja to nazwa aplikacji, więc oto koncepcja

-> menedżer pakietów twojego urządzenia ma wszystkie informacje z nim związane, więc po prostu stwórz obiekt, który dostarczy ci wszystkie informacje związane z nazwą pakietu.

-> Powinieneś także pamiętać, że intencja daje ci "pakiet: real_package_name" więc najpierw musisz uzyskać prawdziwe imię przez rozlanie (użyłem) lub inną prostą implementację String

-> Oto kod, mam nadzieję, że dostaniesz to, czego chcesz. Podaję również informacje o tym, jak uzyskać nazwę aplikacji, ikonę aplikacji, wersję aplikacji, kod wersji aplikacji itp .....

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

Ale w czasie odinstalowywania aplikacji można uzyskać tylko nazwę pakietu, tak jak podczas instalacji Un, wszystkie inne informacje są usuwane przez system.

tanay khandelwal
źródło
intent.getData (). toString () nie jest właściwą drogą, dane w intencji mają strukturę.
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);

źródło