Autore Topic: implementazione del metodo getInstalledApplications?  (Letto 663 volte)

Offline Bytec0d3

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Sistema operativo:
    Android 2.2 Froyo
implementazione del metodo getInstalledApplications?
« il: 07 Ottobre 2010, 20:52:21 CEST »
0
Ciao a tutti,
oggi ho visto un codice che utilizzava il metodo getInstalledApplications presente nel package android.content.pm.PackageManager che restituisce, come suggerisce il nome, restituisce una lista di ApplicationInfo (in questo caso delle applicazioni installate nel dispositivo) ma, guardando il prototipo del metodo vedo che è il seguente:

Codice: [Seleziona]
public abstract List<ApplicationInfo> getInstalledApplications (int flags)

ma non riesco proprio a trovare l'implementazione di questo metodo :(
Quello che mi interessa conoscere principalmente è da che file, o comunque come, riesce a reperire queste informazioni.

Grazie anticipatamente.

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:implementazione del metodo getInstalledApplications?
« Risposta #1 il: 07 Ottobre 2010, 21:47:43 CEST »
0
Ecco a te:
Codice (Java): [Seleziona]
    public List<ApplicationInfo> getInstalledApplications(int flags) {
        ArrayList<ApplicationInfo> finalList = new ArrayList<ApplicationInfo>();
        synchronized(mPackages) {
            if((flags & PackageManager.GET_UNINSTALLED_PACKAGES) != 0) {
                Iterator<PackageSetting> i = mSettings.mPackages.values().iterator();
                while (i.hasNext()) {
                    final PackageSetting ps = i.next();
                    ApplicationInfo ai = generateApplicationInfoFromSettingsLP(ps.name, flags);
                    if(ai != null) {
                        finalList.add(ai);
                    }
                }
            }
            else {
                Iterator<PackageParser.Package> i = mPackages.values().iterator();
                while (i.hasNext()) {
                    final PackageParser.Package p = i.next();
                    if (p.applicationInfo != null) {
                        ApplicationInfo ai = PackageParser.generateApplicationInfo(p, flags);
                        if(ai != null) {
                            finalList.add(ai);
                        }
                    }
                }
            }
        }
        return finalList;
    }

Il sorgente completo lo trovi qui:
http://www.google.com/codesearch/p?hl=it#uX1GffpyOZk/services/java/com/android/server/PackageManagerService.java&q=abstract%20getInstalledApplications%20lang:java&sa=N&cd=1&ct=rc
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline Bytec0d3

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Sistema operativo:
    Android 2.2 Froyo
Re:implementazione del metodo getInstalledApplications?
« Risposta #2 il: 07 Ottobre 2010, 22:04:38 CEST »
0
Grazie mille JD non conoscevo quel "Code search" :D ma contiene tutti i sorgenti di android?
Io in realtà ho anche tutti i sorgenti scaricati tramite Repo come spiegato sul sito dei sorgenti di Android ma deve essermi sfuggito allora.
Grazie ancora ora me lo guardo per bene ^^

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:implementazione del metodo getInstalledApplications?
« Risposta #3 il: 07 Ottobre 2010, 22:05:56 CEST »
0
Tutti i sorgenti di Android è dir poco: è un motore di ricerca di codice open source ;)
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline Bytec0d3

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Sistema operativo:
    Android 2.2 Froyo
Re:implementazione del metodo getInstalledApplications?
« Risposta #4 il: 07 Ottobre 2010, 22:20:26 CEST »
0
ah bhe :P
Un'ultima cosa già che ci sono: leggendo il codice vedo che scorre semplicemente mPackages che è un Hash table....ma nn riesco cmq a capire come trovi le applicazioni.
In pratica a me interesserebbe sapere come fa un'applicazione ad ottenere queste informazioni ad un livello un po più basso del sistema.
Mi spiego meglio: sto cercando di documentarmi un po sulle varie tematiche di sicurezza di Android ma purtroppo sto trovando poco online e quindi vado un po a "tentoni".
Ora mi piacerebbe principalmente capire come il sistema controlla i permessi delle varie applicazioni che vengono specificare nel manifest: lo estrae dall'.apk e lo tiene sempre in memoria? lo richiama solo quando un'applicazione fa qualcosa di particolare (accesso al GPS, rubrica, ecc...)?

Giochicchiando un po con adb shell ho visto che le applicazioni non hanno i permessi per accede in lettura/scrittura alla cartella /data/app/ (dove vengono contenuti gli .apk delle applicazioni installate) ma oggi mi sono imbattuto in un programmino dimostrativo, "Manifest Explorer" (https://www.isecpartners.com/files/ManifestExplorer.zip), che, selezionando un'applicazione installata, legge e stampa l'AndroidManifest.xml della stessa.....e come fa se a livello di permessi Unix non ha i permessi necessari per la lettura?
O prende queste info da qualche altra parte oppure non saprei :(
E, purtroppo, fino adesso con la ricerca di info in rete non ho avuto fortuna...