Получить имя приложения из имени пакета

Я хочу получить имя приложения из имени пакета приложения. Кто-нибудь, пожалуйста, покажите мне, как я могу получить это.

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

6 ответов

Ты можешь использовать PackageManager класс для получения 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)");

Это вернет имя приложения, как определено в <application> признак его манифеста.

Попробуй это

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

и заменить packageName с вашим полным именем пакета.

вы можете получить packageName используя mContext.getPackageName() где mContext = yourActivityName.this для Activity и getActivity() для фрагмента.

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

Кажется, что вы можете получить событие добавления нового пакета, после чего это очень простая концепция, чтобы получить всю необходимую информацию об этом пакете, например, одна такая информация является именем приложения, поэтому вот концепция

-> Менеджер пакетов вашего устройства имеет всю информацию, связанную с ним, поэтому просто создайте объект, который предоставит вам всю информацию, связанную с именем пакета.

-> Вы также должны помнить, что намерение дает вам "package: real_package_name", поэтому сначала вы должны сначала получить реальное имя, пролив (я использовал) или любую другую простую реализацию String.

-> Вот код, надеюсь, вы получите то, что вы хотите, я также даю информацию о том, как вы можете получить имя приложения, значок приложения, версию приложения, код версии приложения и т. Д......

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

Но во время удаления приложения вы можете получить только имя пакета, так как при установке Un вся остальная информация удаляется системой.

Попробуйте это ниже, это сработало для меня.

      public static ArrayList<ApplicationInfo> getLaunchableInstalledApps(Context context){

    final PackageManager pm = context.getPackageManager();
    Intent intent = new Intent(Intent.ACTION_MAIN, null);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    ArrayList<ApplicationInfo> list = new ArrayList<>();
    for (ResolveInfo resolveInfo:pm.queryIntentActivities(intent, PackageManager.GET_META_DATA)){
        try {
            ApplicationInfo app = context.getPackageManager().getApplicationInfo(resolveInfo.activityInfo.packageName, 0);
            list.add(app);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    if (cacheAppsList.isEmpty()){
        cacheAppsList.addAll(list);
    }

    return list;
}
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);
Другие вопросы по тегам