2012-05-30 45 views

回答

44

PackageManager類提供了getInstallerPackageName方法,該方法會告訴您安裝您指定的軟件包的軟件包名稱。側裝應用程序不會包含值。

編輯:注意@mttmllns'answer below關於亞馬遜應用商店。

+4

它非常好。 – ttom

+0

@AbhishekB你的Android版本是什麼?你在模擬器中嗎? – MattC

+3

@AbhishekB我不知道一種方法來找到側裝應用程序的起源。我不確定這是如何被跟蹤的,因爲它只是一個APK文件,它被加載到設備的某個地方,然後可能通過PackageManager進行安裝。 – MattC

22

而FYI apparently亞馬遜商店的最新版本最終設置PackageManager.getInstallerPackageName()"com.amazon.venezia"以及與Google Play的"com.android.vending"對比。

+0

無法對類型爲PackageManager的非靜態方法getInstallerPackageName(String)進行靜態引用。 –

+0

每個appstore在Playstore上都有自己的marketapp,然後安裝它們的apks(包)。包管理器getInstaller ...()返回安裝給定apk的marketapp的包名稱。例如。 com.amazon.venezia是amazon marketapp的軟件包名稱。非常聰明,因爲PlayStore可以控制哪些市場應用程序是可信的。這旨在最終防止所有不可信的sideloads。注意到新的android操作系統版本的採用正在急劇下降。 KitKat可能成爲事實標準。 –

15

我用這個代碼來檢查,如果構建是從商店下載或側載:

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; 
} 
相關問題