2012-05-30 42 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; 
} 
相关问题