【发布时间】:2012-11-27 03:52:44
【问题描述】:
并非所有手机都安装了 Android Market,因此使用意图打开市场应用程序失败。
处理这个问题的最佳方法是什么?
- 如果用户没有安装 Android 电子市场,则隐藏此功能(我如何检测到这一点?)。
- 处理可能的错误,如何处理(并可能建议用户下载 Android Market)?
【问题讨论】:
-
用户无法下载Android Market。
并非所有手机都安装了 Android Market,因此使用意图打开市场应用程序失败。
处理这个问题的最佳方法是什么?
【问题讨论】:
上面答案的问题是,如果你只是传递一个 URL,用户会被提示如何处理 Intent。
一个更优雅的方式来做 IMO,扩展 1st answer above,是测试是否安装了市场应用程序,如果没有,则传递一个 URL(实际上你会想要测试看看是否有什么可以处理这个意图,但如果你碰巧有一个没有 Play 商店和浏览器的设备,那么我会质疑为什么用户会首先安装我的应用程序(我想是另一个故事)......
也许有更好的方法,但这对我有用:
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")));
【讨论】:
如果您的应用是由 Android Market 提供的,那么它确实安装了 Android Market。 :)
好吧,这很讽刺,但有一个重要的事实 - Google 付出了很多努力来强制设备的兼容性保证,以便允许它们与 Android Market 一起发布,这样您就可以知道无论您使用什么正在运行将按其应有的方式运行。
如果您从 Android Market 以外的平台交付应用,您需要从交付应用的人那里获取有关他们有哪些兼容性保证的信息。
如果他们没有兼容性保证(或者您只是将原始 .apk 放在网站等上),那么您的拍摄完全是废话。您正在运行的设备的软件几乎可以以任何方式进行修改,并且您可以想象到任何类型的行为差异。
也就是说,如果你想确定当前设备上是否有活动来处理特定的 Intent,你可以使用这个:PackageManager.resolveActivity
【讨论】:
使用网址作为意图目标,然后如果没有安卓市场,它将在浏览器中打开。
【讨论】: