2011-03-22 26 views
5

Este es el código que tengo en este momento pero aún no puedo obtener una lista de todas las aplicaciones en el teléfono. ¿Alguien ve lo que estoy haciendo mal?Cómo obtener todas las aplicaciones instaladas en el teléfono Android

public class GetAppList extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     try { 
      List<PackageInfo> appListInfo1 = this.getPackageManager() 
      .getInstalledPackages(0); 
      JSONArray ja = new JSONArray(); 
      try { 
       HttpClient httpclient = new DefaultHttpClient(); 
       Object sendDataUrl = null; 
       HttpPost request = new HttpPost(sendDataUrl.toString()); 
       List<NameValuePair> params = new ArrayList<NameValuePair>(); 
       ContextWrapper context = null; 
       PackageManager pm = context.getPackageManager(); 
       List<PackageInfo> appListInfo = pm.getInstalledPackages(0); 
       for (PackageInfo p : appListInfo) { 
        if (p.applicationInfo.uid > 10000) { 
         JSONObject jo = new JSONObject(); 
         jo.put("label", p.applicationInfo.loadLabel(pm).toString()); 
         jo.put("packageName", p.applicationInfo.packageName); 
         ja.put(jo); 
        } 
        System.out.print(ja); 
       }   
     } catch (Exception e) { 
      // TODO: handle exception 
     } 
     finally { 
      // ... cleanup that will execute whether or not an error occurred ... 
     } 



}catch (Exception e) { 
    // TODO: handle exception 
} 
finally { 
    // ... cleanup that will execute whether or not an error occurred ... 
} 
    }} 

Lo siento, no puedo obtener esto para formatear el código correctamente.

Respuesta

3

Este es el código que utilizo para aplicaciones de lista:

PackageManager pm = this.getPackageManager(); 
Intent intent = new Intent(Intent.ACTION_MAIN, null); 

String activityName = rInfo.activityInfo.name; 
List<ResolveInfo> list = pm.queryIntentActivities(intent, PackageManager.PERMISSION_GRANTED); 

for (ResolveInfo rInfo : list) { 
    pkg = rInfo.activityInfo.applicationInfo.packageName; 
    if (pm.getLaunchIntentForPackage(pkg) == null) { 
     continue; 
    } 
    String label = rInfo.activityInfo.applicationInfo.loadLabel(pm).toString(); 
    arrayList.add(new AppEntry(label, activityName, pkg, null)); 
} 

Si más adelante desea ejecutar la aplicación sólo sabiendo PKG y activityName que puede hacer:

Intent intent = new Intent(Intent.ACTION_MAIN, null); 
intent.addCategory(Intent.CATEGORY_LAUNCHER); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.setClassName(pkg, activityname); 
ctx.startActivity(intent); 
+1

Este código no se corta y pega como correcto (errores alrededor de String activityName y pkg) ... solo FYI – easycheese

5

Este código registra el nombre y nombre del paquete de todas las aplicaciones instaladas. Puede verificar fácilmente el registro usando LogCat (si está usando Eclipse).

Nombre del paquete - nombre del paquete de la aplicación.

Nombre - etiqueta de texto asociada a la aplicación. No puede usar solo appInfo.name ya que devolverá null. Con appInfo.loadLabel(packageManager) obtiene el nombre de la aplicación real como Speech Recorder en lugar del nombre del paquete com.android.speechrecorder.

final PackageManager packageManager = getPackageManager(); 
List<ApplicationInfo> installedApplications = 
    packageManager.getInstalledApplications(PackageManager.GET_META_DATA); 

for (ApplicationInfo appInfo : installedApplications) 
{ 
    Log.d("OUTPUT", "Package name : " + appInfo.packageName); 
    Log.d("OUTPUT", "Name: " + appInfo.loadLabel(packageManager)); 
} 
Cuestiones relacionadas