5

在我的 Android 应用程序中,我想检查应用程序安装的来源。我查看了 Android 文档,发现以下 API 作为 PackageManager 类的一部分:

abstract String getInstallerPackageName(String packageName) 

检索安装包的应用程序的包名。

然后我在onCreateMyActivity的方法中使用了如下代码:

if(Build.VERSION.SDK_INT >= 11) 
{
    PackageManager myapp= this.getPackageManager(); 
    String installer = myapp.getInstallerPackageName("com.MyPackage");
    if(installer == null)
    {
        Toast.makeText(getApplicationContext(), MyActivity.this.getString(R.string.invalidsource), Toast.LENGTH_SHORT).show();
        MyActivity.this.finish();
    }
}

但看起来这个 APInull在真实设备上返回。

如果我们有任何其他获取应用程序安装源的方法,请告诉我。

4

3 回答 3

9

如果你想测试这个方法是通过使用将apk存储在设备上

adb push 'test.apk' '/sdcard/Download'

然后通过输入“adb shell”并在终端中按回车键进入 adb shell,然后使用以下命令安装

pm install -i 'installernameyouwant' /sdcard/Download/test.apk

在上述方法中安装应用程序时,对 getInstallerPackageName() 的调用会返回您在上述命令中提供的安装程序名称

于 2014-09-11T06:31:23.183 回答
5

关于您的问题,该应用程序是如何安装到设备上的?通过“adb install”,它将为空。

使用以下内容,您应该能够将其覆盖为您想要的任何内容以进行测试。

pm install -i installername com.example.package

GooglePlay 的值应为 com.google.android.feedback。我不确定其他应用商店使用什么价值。

于 2012-10-08T14:31:26.707 回答
2

我用模拟器和真实设备测试了这个 API 方法。大多数情况下,它返回 null。仅com.android.vending在从官方 Google Play 安装应用程序时返回。

与中国本地应用市场应用程序,如AppChinawandoujianull返回。

代码片段和日志发布在这里:Github Gist

于 2012-12-03T03:29:49.427 回答