obtener el nombre de la aplicación del nombre del paquete


84

Quiero obtener el nombre de la aplicación del nombre del paquete de la aplicación. Que alguien me muestre cómo puedo conseguir esto.

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

Respuestas:


196

Puedes usar la PackageManagerclase para obtener 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)");

Esto devolvería el nombre de la aplicación como se define en la <application>etiqueta de su manifiesto.


1
Eso es perfecto. Lo he estado buscando durante horas, gracias Xion. : D
drulabs

3
me está devolviendo desconocido todo el tiempo, ya tengo el nombre del paquete, solo quiero saber el nombre del nombre del paquete
nida

Esto no funciona cuando lo uso en el receptor global
Ziv Kesten

no puede obtener applicationInfo de un paquete después de PACKAGE_REMOVED.
John61590

perfecto ... sólo copia y pega ... hace el trabajo. gracias.
ABHIMANGAL MS

37

Prueba esto

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

y reemplácelo packageNamecon el nombre completo de su paquete.

puedes obtener packageName usando mContext.getPackageName()where mContext = yourActivityName.thispara Activity y getActivity () para fragment.


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

3

Parece que puede recibir el evento de un nuevo paquete agregado después de eso, es un concepto muy simple para obtener toda la información relevante sobre ese paquete, como tal información es el nombre de la aplicación, así que aquí está el concepto

-> el administrador de paquetes de su dispositivo tiene toda la información relacionada con él, así que simplemente haga un objeto que le dará toda la información relacionada con el nombre del paquete.

-> También debe recordar que la intención le da "package: real_package_name" así que primero debe obtener el nombre real primero derramando (yo usé) o por cualquier otra implementación simple de String

-> Aquí está el código, espero que obtenga lo que desea. También estoy dando información sobre cómo puede obtener el nombre de la aplicación, el icono de la aplicación, la versión de la aplicación, el código de la versión de la aplicación, 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());
             }
         }
      }
   }    
}

Pero en el momento de la desinstalación de la aplicación, solo puede obtener el nombre del paquete, ya que en la desinstalación, el sistema elimina el resto de la información.


intent.getData (). toString () no es el camino a seguir, los datos en la intención están estructurados.
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);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.