2012-05-30 11 views

Antwort

44

Die Klasse PackageManager liefert die getInstallerPackageName-Methode, die Ihnen den Paketnamen des installierten Pakets mitteilt. Seitengeladene Apps enthalten keinen Wert.

BEARBEITEN: Hinweis @ mttmllns 'answer below in Bezug auf den Amazon App Store.

+4

Es funktioniert sehr gut. – ttom

+0

@AbhishekB welche Version von Android bist du? Bist du in einem Emulator? – MattC

+3

@AbhishekB Ich kenne keine Möglichkeit, die Entstehung von seitengeladenen Apps zu finden. Ich bin nicht sicher, wie das überhaupt verfolgt werden würde, da es technisch gesehen nur eine APK-Datei ist, die irgendwo auf das Gerät geladen wird und dann vermutlich über den PackageManager installiert wird. – MattC

22

Und FYI apparently die neueste Version des Amazon-Store setzt schließlich PackageManager.getInstallerPackageName()-"com.amazon.venezia" als auch mit Google Play-"com.android.vending" zu kontrastieren.

+0

Kann keine statische Referenz auf die nicht statische Methode getInstallerPackageName (String) vom Typ PackageManager erstellen. –

+0

Jeder Appstore hat eine eigene MarketApp auf Playstore, die wiederum ihre APKs (Pakete) installiert. Der Paketmanager getInstaller ...() gibt den Paketnamen der marketapp zurück, die eine bestimmte apk installiert hat. Z.B. com.amazon.venezia ist der Paketname der amazon marketapp. Ziemlich clever, denn dann kann PlayStore steuern, welche Marketapps vertrauenswürdig sind. Dies soll schließlich alle nicht vertrauenswürdigen Sideloads verhindern. Ich stelle fest, dass die Verbreitung neuer Android OS-Versionen dramatisch sinkt. KitKat könnte zum Defacto-Standard werden. –

15

Ich benutze diesen Code zu überprüfen, ob ein Build aus einem Geschäft oder Sideload heruntergeladen wurde:

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