2012-05-30 14 views

risposta

44

La classe PackageManager fornisce il metodo getInstallerPackageName che indica il nome del pacchetto di qualunque sia installato il pacchetto specificato. Le app caricate lateralmente non conterranno un valore.

MODIFICA: Nota @mttmllns 'answer below riguardante l'app store Amazon.

+4

Funziona molto bene. – ttom

+0

@AbhishekB quale versione di Android sei? Sei in un emulatore? – MattC

+3

@AbhishekB Non conosco un modo per trovare l'origine delle app con caricamento laterale. Non sono sicuro di come verrebbe tracciato anche dal momento che tecnicamente è solo un file APK che viene caricato sul dispositivo da qualche parte e quindi presumibilmente installato tramite PackageManager. – MattC

22

E FYI apparently l'ultima versione del negozio di Amazon, infine, imposta PackageManager.getInstallerPackageName()-"com.amazon.venezia" pure in contrasto con Google Play di "com.android.vending".

+0

Impossibile creare un riferimento statico al metodo non statico getInstallerPackageName (String) dal tipo PackageManager –

+0

Ogni app store ha la propria marketapp su Playstore che a sua volta installa i propri apk (pacchetti). Il packagemanager getInstaller ...() restituisce il nome del pacchetto del marketapp che ha installato un determinato apk. Per esempio. com.amazon.venezia è il nome del pacchetto del marketapp di Amazon. Abbastanza intelligente, perché poi PlayStore può controllare quali marketapp sono attendibili. Questo è progettato per prevenire alla fine TUTTI i sideload non attendibili. Notando che l'adozione di nuove versioni del sistema operativo Android sta diminuendo drasticamente. KitKat potrebbe diventare lo standard defacto. –

15

Io uso questo codice per controllare se una build è stato scaricato da un negozio o sideloaded:

public static boolean isStoreVersion(Context context) { 
    boolean result = false; 

    try { 
     String installer = context.getPackageManager() 
            .getInstallerPackageName(context.getPackageName()); 
     result = !TextUtils.isEmpty(installer); 
    } catch (Throwable e) {   
    } 

    return result; 
}