getInstallerPackageName返回null

时间:2012-09-26 02:08:42

标签: android install

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

abstract String getInstallerPackageName(String packageName) 
     

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

然后我在MyActivity的onCreate方法中使用了以下代码:

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

但看起来这个API会在真实设备上返回null

如果我们有其他方法可以获取应用安装源,请告诉我。

3 个答案:

答案 0 :(得分:6)

如果你想测试它的方法是使用

将apk存储在设备上

adb push' test.apk' ' / SD卡/下载'

然后输入' adb shell'转到adb shell。然后点击进入终端然后使用以下命令安装

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

在上面的方法中安装应用程序时,对getInstallerPackageName()的调用将返回您在上面的命令中给出的安装程序名称

为@mattmook提供了#34; pm install"命令。

答案 1 :(得分:5)

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

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

pm install -i installername com.example.package

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

答案 2 :(得分:2)

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

借助中国本地应用市场应用,例如AppChinawandoujia,会返回null

代码段和日志发布在此处:Github Gist