2011-04-30 40 views
68

Deseo obtener el nombre de la aplicación del nombre del paquete de la aplicación. Alguien por favor muéstrame cómo puedo conseguir esto.obtener el nombre de la aplicación del nombre del paquete

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

Respuesta

174

Puede utilizar PackageManager clase 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 podría devolver el nombre de la aplicación como se define en <application> etiqueta de su manifiesto.

+1

que es perfecto. Estuve buscándolo durante horas, gracias Xion. : D – drulabs

+3

me devuelve desconocido todo el tiempo yo también tengo nombre de paquete solo quiero saber el nombre del paquete – nida

+0

Esto no funciona cuando lo uso en el receptor global –

-1
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); 
3

Parece que usted es capaz de recibir el evento del nuevo paquete añade después de eso, es un concepto muy simple para obtener la información pertinente sobre ese paquete como uno tal información es el nombre de la aplicación así que aquí es el concepto

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

-> También debe recordar que la intención le da "paquete: real_package_name" por lo que primero se tiene que conseguir nombre real por primera vez por derrame (he usado) o por cualquier otra aplicación sencilla de la cadena

-> Aquí el código espero obtendrá lo que quiere I m que también da información sobre cómo puede obtener nombre de la aplicación, icono de la aplicación, versión de la aplicación, el código de 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 aplicación Desinstalar solo puede obtener el nombre del paquete ya que en la instalación de la ONU el resto de la información es eliminada por el sistema.

+0

intent.getData(). ToString() no es el camino para ir, los datos en la intención están estructurados. –

21

probar este

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

y reemplazar packageName con su paquete de nombre completo.

puede obtener packageName usando mContext.getPackageName() donde mContext = yourActivityName.this para la actividad y getActivity() para el fragmento.

+1

gracias @Nepster es realmente útil :) –

1
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 ""; 
    } 
} 
Cuestiones relacionadas