并非所有手机都安装了Android Market,因此使用打开市场应用的意图失败。
处理此问题的最佳方法是什么?
答案 0 :(得分:5)
上面的答案的问题是,如果你只是传递一个URL,将提示用户如何处理意图。
更优雅的方式IMO,扩展1st answer above,是测试市场应用程序是否已安装,如果没有,则传递一个URL(实际上你想要测试看看)如果有什么东西可以处理这个意图,但如果你碰巧有一个没有游戏商店和浏览器的设备,那么我会问为什么用户会首先安装我的应用程序(我想的另一个故事)...... / p>
也许有更好的方法,但这对我有用:
private String getMarketURI(String marketURL) {
String returnURL = "";
PackageManager packageManager = getApplication().getPackageManager();
Uri marketUri = Uri.parse("market://" + marketURL);
Intent marketIntent = new Intent(Intent.ACTION_VIEW).setData(marketUri);
if (marketIntent.resolveActivity(packageManager) != null) {
returnURL = "market://" + marketURL;
} else {
returnURL = "https://play.google.com/store/apps/" + marketURL;
}
return returnURL;
}
然后像这样使用它:
marketIntent.setData(Uri.parse(getMarketURI("details?id=com.yourapps.packagename")));
答案 1 :(得分:3)
如果您的应用是由Android电子市场提供的,那么它确实安装了Android电子市场。 :)
好的,这是讽刺,但有一个重要的事实 - 谷歌在设备上强制实施兼容性保证,以便允许它们与Android Market一起发货,所以这就是你怎么知道无论你怎么做的正在运行的将表现得如此。
如果您从Android Market以外的地方提供应用程序,则需要从提供应用程序的任何人那里获取有关其具有的兼容性保证的信息。
如果他们没有兼容性保证(或者您只是将原始.apk放在网站上等),那么您就有了完整的垃圾邮件。您运行的设备可能已经对其软件进行了几乎任何修改,并且在您可以想象的行为方面存在任何差异。
也就是说,如果您想确定当前设备上是否有活动来处理特定的Intent,您可以使用:PackageManager.resolveActivity
答案 2 :(得分:1)
使用网址作为目标,然后如果没有Android市场,它将在浏览器中打开。