如何检查用户设备上是否安装了Android市场?

6

我应该如何编写代码来判断您的安卓手机上是否安装了安卓市场?

2个回答

8
有两种方法。您可以使用先前提到的getPackageManager()getApplicationInfo()(如果未找到包,将抛出PacketManager.NameNotFoundException - 请参见这里)。Android市场的包名是com.android.vending
但是,您也可以创建一个虚拟意图来搜索市场并检查它的处理方式。 如果结果列表至少有一个条目,则可以确定Android Market已安装:
Intent market = new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=dummy"));
PackageManager manager = getPackageManager();
List<ResolveInfo> list = manager.queryIntentActivities(mmarket, 0);

“com.android.vending” 在 Honeycomb(或更高版本)设备上是否也是“我的应用程序”所使用的包名称?此外,“market://”意图检查不可靠,因为其他市场应用程序也使用它。 - Mark
我不能确定在com.android.vending和Honeycomb方面的情况。然而,Android开发人员在没有任何针对Honeycomb的特定说明的情况下参考com.android.vending(例如:http://developer.android.com/guide/publishing/licensing.html),因此我会认为它按预期工作。 - user519908
1
在Kindle Fire上,亚马逊的应用商店将会响应market:// URI。 - Brian Pellin
@BrianPellin,您的意思是当我传递带有market:// URI的意图时,亚马逊设备仍然可以处理它并将用户转到亚马逊应用商店吗?我知道如果这样做,我不能上传到亚马逊应用商店,但如果我不在乎呢? - Bear

1

以下是我所做的(假设浏览器存在):

Intent market = new Intent(Intent.ACTION_VIEW).setData(Uri
        .parse("market://details?id=com.example.app"));


Intent website = new Intent(Intent.ACTION_VIEW).setData(Uri
        .parse("http://play.google.com/store/apps/details?id=com.example.app"));

try {

    startActivity(market);

} catch (ActivityNotFoundException e) {

    startActivity(website);

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接