Pregunta

Estoy utilizando el siguiente fragmento de código en el momento:

List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);

pero vuelve Aplicaciones que se han instalado por el fabricante del dispositivo tanto y yo. Cómo limitarlo para que sólo las aplicaciones que he instalado son devueltos?

¿Fue útil?

Solución

// Flags: See below
int flags = PackageManager.GET_META_DATA | 
            PackageManager.GET_SHARED_LIBRARY_FILES |     
            PackageManager.GET_UNINSTALLED_PACKAGES;

PackageManager pm = getPackageManager();
List<ApplicationInfo> applications = pm.getInstalledApplications(flags);
for (ApplicationInfo appInfo : applications) {
    if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) {
        // System application
    } else {
        // Installed by user
    }
}

Banderas:

Otros consejos

La respuesta de Zelimir es correcta. Pero en algunos casos no le dará todas las aplicaciones de terceros instaladas. ApplicationInfo también tiene FLAG_UPDATED_SYSTEM_APP bandera 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 instalan desde Google Play Store. Por lo tanto, pueden ser considerados como aplicaciones de terceros.

Por lo tanto, es posible que también desee comprobar la bandera FLAG_UPDATED_SYSTEM_APP.

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

Si lo hago pkgAppsList.get (0), devuelve un objeto ResolveInfo. ¿Cómo puedo obtener información tal como el icono, y packageName?

Sólo hacer esto:

ResolveInfo info = pkgAppsList.get(0);
ApplicationInfo appInfo = info.activityInfo.applicationInfo;

PackageManager packageManager = = getPackageManager();
//And then you retrieve all needed data:
Drawable packageIcon = packageManager.getApplicationIcon(applicationInfo); //Icon
String packageName = applicationInfo.packageName; //Package name
String packageLabel = String.valueOf(packageManager.getApplicationLabel(applicationInfo)) //Package label(app name)

La respuesta de Nikolai es correcta, pero se podría optimizar el uso de un repetidor. Esto es lo que ocurrió:

/**
 * Return list of installed user applications
 */
static List<ApplicationInfo> getUserInstalledApplications(Context context) {
    // Get installed applications
    final PackageManager packageManager = context.getPackageManager();
    List<ApplicationInfo> installedApplications =
            packageManager.getInstalledApplications(PackageManager.GET_META_DATA);

    // Remove system apps
    Iterator<ApplicationInfo> it = installedApplications.iterator();
    while (it.hasNext()) {
        ApplicationInfo appInfo = it.next();
        if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
            it.remove();
        }
    }

    // Return installed applications
    return installedApplications;
}
final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
final List pkgAppsList = context.getPackageManager().queryIntentActivities( mainIntent, 0);

usuario

  1. pkgAppsList.get(i).activityInfo.packageName para ir a buscar packageName
  2. pkgAppsList.get(i).activityInfo.applicationInfo.loadLabel(getPackageManager()).toString() a fetch app level name
clase

Android PackageManager se utiliza para recuperar información sobre los paquetes de aplicaciones que están instaladas actualmente en el dispositivo. Usted puede obtener una instancia de la clase PackageManager llamando getPackageManager (). PackageManager proporciona métodos para consultar y manipular los paquetes instalados y permisos relacionados, etc. En este ejemplo Android, que obtenemos la lista de aplicaciones instaladas en Android.

PackageManager PackageManager = getPackageManager (); listado = packageManager.getInstalledApplications (PackageManager.GET_META_DATA)

packageManager.getInstalledApplications () devolverá una lista de todos los paquetes de aplicaciones que están instaladas en el dispositivo. Si fijamos los GET_UNINSTALLED_PACKAGES indicador se ha establecido, una lista de todas las aplicaciones incluidas las que ha de suprimirse DONT_DELETE_DATA (aplicaciones parcialmente instalados con directorio de datos) serán devueltos.

aquí.

Otra buena leer aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top