Domanda

Sto usando il seguente pezzo di codice in questo momento:

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

ma restituisce Apps che sono stati installati dal produttore del dispositivo sia e me. Come limitare in modo che solo le applicazioni che ho installato vengono restituiti?

È stato utile?

Soluzione

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

Bandiere:

Altri suggerimenti

La risposta di Zelimir è corretta. Ma in alcuni casi non vi darà tutte le applicazioni di terze parti installate. ApplicationInfo ha anche bandiera FLAG_UPDATED_SYSTEM_APP che è impostato

Se questa applicazione è stato installato come aggiornamento di un sistema integrato applicazione

Sul mio telefono intelligente tali applicazioni includono Amazone Kindle, Adobe Reader, Slacker Radio e altri. Queste applicazioni non è venuto con il telefono e sono stati installati dal Google Play Store. Pertanto, esse possono essere considerate come applicazioni di terze parti.

Quindi, si potrebbe anche voler controllare bandiera 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
    }
}

Se faccio pkgAppsList.get (0), restituisce un oggetto ResolveInfo. Come posso ottenere informazioni come l'icona, e packageName?

Basta fare questo:

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 risposta di Nikolai è corretta, ma potrebbe essere ottimizzato utilizzando un iteratore. Questo è ciò che mi si avvicinò con:

/**
 * 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);

utente

  1. pkgAppsList.get(i).activityInfo.packageName per andare a prendere packageName
  2. pkgAppsList.get(i).activityInfo.applicationInfo.loadLabel(getPackageManager()).toString() a fetch app level name
Classe

PackageManager Android viene utilizzato per recuperare le informazioni sui pacchetti di applicazioni che sono attualmente installati sul dispositivo. È possibile ottenere un'istanza della classe PackageManager chiamando getPackageManager (). PackageManager fornisce i metodi per l'interrogazione e la manipolazione di pacchetti installati e le autorizzazioni relative, etc. In questo esempio Android, noi otteniamo elenco delle applicazioni installate in Android.

PackageManager PackageManager = getPackageManager (); Lista list = packageManager.getInstalledApplications (PackageManager.GET_META_DATA)

packageManager.getInstalledApplications () restituire un elenco di tutti i pacchetti applicativi installati sul dispositivo. Se optiamo per i GET_UNINSTALLED_PACKAGES flag è stato impostato, un elenco di tutte le applicazioni, compresi quelli cancellati con DONT_DELETE_DATA (applicazioni installate parzialmente con directory dei dati) verrà restituito.

qui.

Un altro buon leggere qui.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top