在我的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
。
如果我们有其他方法可以获取应用安装源,请告诉我。
答案 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
。
借助中国本地应用市场应用,例如AppChina和wandoujia,会返回null
。
代码段和日志发布在此处:Github Gist