2011-04-01 14 views
9

¿Cómo puedo obtener la lista de aplicaciones de terceros instaladas en el teléfono Android?La aplicación instalada es de terceros o no

Puedo obtener la lista de aplicaciones con el siguiente código pero solo quiero aplicaciones de terceros.

PackageManager pm = context.getPackageManager(); 
appInstalModel.setAppName(p.applicationInfo.loadLabel(context.getPackageManager()).toString()); 
appInstalModel.setAppPkg(p.packageName); 
appInstalModel.setAppVersionName(p.versionName); 
+0

¿Qué quiere decir por terceros? ¿No de Google? ¿No de ti? – RoflcoptrException

+0

@Roflcoptr Instalado en el sistema o instalado por el usuario. –

Respuesta

7
List<ApplicationInfo> apps = getPackageManager().getInstalledApplications(0); 
    for (int i=0; i < apps.size(); i++) 
    { 
     if ((apps.get(i).flags & ApplicationInfo.FLAG_SYSTEM) == 1) 
     { 
      //System app 
     } 
    } 
+1

Creo que debería gustar esto. if ((apps.get (i) .applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) { // Aplicación de sistema } –

2

El objeto ApplicationInfo tendrá la bandera FLAG_SYSTEM desarmado. El programa sdmove podría tener algún código de muestra.

+0

perfecto. Tengo que investigarlo. –

+0

¿Cómo puedo clonar el proyecto sdmove? –

2

cambios pequeños en @Roflcoptr answer.

List<ApplicationInfo> apps = getPackageManager().getInstalledApplications(0); 
for (int i=0; i < apps.size(); i++) 
{ 
    if ((apps.get(i).applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) 
    { 
     //System app 
    } 
} 

Gracias @Roflcoptr por su respuesta.

+3

Recomiendo cambiar esto de '(XXX & ApplicationInfo.FLAG_SYSTEM) == 1) 'to' (XXX & ApplicationInfo.FLAG_SYSTEM)! = 0) 'o' (XXX & ApplicationInfo.FLAG_SYSTEM == ApplicationInfo.FLAG_SYSTEM) '. El 1 solo funciona porque FLAG_SYSTEM pasa a ser 1, pero ese es un valor codificado. –

7

La respuesta de RoflcoptrException es correcta. Pero en algunos casos, no le proporcionará todas las aplicaciones de terceros instaladas. ApplicationInfo también tiene bandera FLAG_UPDATED_SYSTEM_APP que se establece

Si esta solicitud ha sido instalar como una actualización de un sistema integrado de aplicación

en mi teléfono inteligente Tales aplicaciones incluyen Amazone Kindle, Adobe Reader, Slacker Radio y otros. Estas aplicaciones no vienen con el teléfono y se instalaron desde Google Play Store. Por lo tanto, pueden considerarse aplicaciones de terceros.

Por lo tanto, es posible que desee comprobar FLAG_UPDATED_SYSTEM_APP bandera.

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

for (ApplicationInfo appInfo : installedApplications) 
{ 
    if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) 
    { 
     // IS A SYSTEM APP 
    } 

    if ((appInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) 
    { 
     // APP WAS INSTALL AS AN UPDATE TO A BUILD-IN SYSTEM APP 
    } 
} 
0
public static List<PackageInfo> getInstalledAppList(Context context) { 
     ArrayList<PackageInfo> packList = (ArrayList<PackageInfo>) context.getPackageManager().getInstalledPackages(0); 
     showLog("/n/n ********************** App List ********************"); 
     for (int i = 0; i < packList.size(); i++) { 

      PackageInfo packInfo = packList.get(i); 
      if ((packInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { 
       String appName = packInfo.applicationInfo.loadLabel(context.getPackageManager()).toString(); 
       showLog(appName + "(" + packInfo.packageName + ")"); 
      } else { 
       packList.remove(i); 
       i--; 
      } 
     } 

     showLog("List Size : " + packList.size()); 
     showLog("/n/n ********************** END ********************"); 
     return packList; 
    } 
Cuestiones relacionadas