2012-05-30 17 views

Respuesta

44

La clase PackageManager proporciona el método getInstallerPackageName que le indicará el nombre del paquete de lo que haya instalado el paquete que especifique. Las aplicaciones cargadas lateralmente no contendrán un valor.

EDIT: Tenga en cuenta @mttmllns 'answer below con respecto a la tienda de aplicaciones de Amazon.

+4

Funciona muy bien. – ttom

+0

@AbhishekB ¿En qué versión de Android estás? ¿Estás en un emulador? – MattC

+3

@AbhishekB No conozco una forma de encontrar el origen de las aplicaciones de carga lateral. No estoy seguro de cómo se rastrearía eso, ya que técnicamente es solo un archivo APK que se carga en el dispositivo en algún lugar y luego se instala a través de PackageManager. – MattC

22

Y FYI apparently la última versión de la tienda de Amazon, finalmente, establece PackageManager.getInstallerPackageName() a "com.amazon.venezia" así contrastar con Google Play "com.android.vending".

+0

No se puede hacer una referencia estática al método no estático getInstallerPackageName (String) del tipo PackageManager –

+0

Cada tienda de aplicaciones tiene su propia aplicación de marke en Playstore que a su vez instala sus apks (paquetes). El gestor de paquetes getInstaller ...() devuelve el nombre del paquete de marketapp que instaló una aplicación determinada. P.ej. com.amazon.venezia es el nombre del paquete de amazon marketapp. Muy inteligente, porque entonces PlayStore puede controlar en qué marketapps se confía. Esto está diseñado para eventualmente prevenir TODAS las cargas secundarias que no sean de confianza. Al darse cuenta de que la adopción de las nuevas versiones del sistema operativo Android está disminuyendo drásticamente. KitKat podría convertirse en el estándar de facto. –

15

Puedo usar este código para comprobar si una acumulación ha sido descargado de una tienda o transferidos en forma paralela:

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; 
} 
Cuestiones relacionadas