“未发现处理意图的活动”并非所有手机都安装了Android Market

“未发现处理意图的活动”并非所有手机都安装了Android Market,android,android-intent,Android,Android Intent,并非所有手机都安装了Android Market,因此使用intent to open Market应用程序失败 最好的处理方法是什么 如果用户未安装Android Market,则隐藏此功能。我将如何检测此功能?。 处理可能的错误,如何以及可能如何建议用户下载Android Market? 如果您的应用程序由Android Market提供,那么它确实安装了Android Market: 好吧,这是斯奈德,但有一个重要的事实——谷歌付出了巨大的努力,在设备上实施兼容性保证,以便允许它们与And

并非所有手机都安装了Android Market,因此使用intent to open Market应用程序失败

最好的处理方法是什么

如果用户未安装Android Market,则隐藏此功能。我将如何检测此功能?。 处理可能的错误,如何以及可能如何建议用户下载Android Market?
如果您的应用程序由Android Market提供,那么它确实安装了Android Market:

好吧,这是斯奈德,但有一个重要的事实——谷歌付出了巨大的努力,在设备上实施兼容性保证,以便允许它们与Android Market一起发布,因此,这就是你如何知道你正在运行的任何东西都会正常运行的方式

如果你是从Android Market以外的其他地方交付应用程序,你需要从交付应用程序的人那里获得有关其兼容性保证的信息

如果他们没有兼容性保证,或者你只是在网站上放了一个raw.apk之类的东西,那么你就完蛋了。您正在运行的设备可能已经以几乎任何方式修改了其软件,并且在您可以想象的行为上有任何不同


也就是说,如果您想确定当前设备上是否存在处理特定意图的活动,您可以使用以下命令:

如果您的应用程序由Android Market提供,则它确实安装了Android Market:

好吧,这是斯奈德,但有一个重要的事实——谷歌付出了巨大的努力,在设备上实施兼容性保证,以便允许它们与Android Market一起发布,因此,这就是你如何知道你正在运行的任何东西都会正常运行的方式

如果你是从Android Market以外的其他地方交付应用程序,你需要从交付应用程序的人那里获得有关其兼容性保证的信息

如果他们没有兼容性保证,或者你只是在网站上放了一个raw.apk之类的东西,那么你就完蛋了。您正在运行的设备可能已经以几乎任何方式修改了其软件,并且在您可以想象的行为上有任何不同


也就是说,如果您想确定当前设备上是否存在处理特定意图的活动,您可以这样做:

使用网址作为意向目标,然后如果没有android market,它将在浏览器中打开。

使用网址作为意向目标,然后如果没有android market,它将在浏览器中打开。

以上答案的问题是,如果您只传递一个URL,则会提示用户如何处理意图

在IMO上,一种更优雅的方法是测试market应用程序是否已安装,如果未安装,则传递一个URL,实际上您希望测试该URL,看看是否有东西可以处理该意图,但是如果你碰巧有一台没有play store和浏览器的设备,那么我会问为什么用户会首先安装我的应用程序,我想是另一个故事

也许有更好的方法,但以下是对我有效的方法:

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")));

以上答案的问题是,如果您只传递一个URL,用户将被提示如何处理该意图

在IMO上,一种更优雅的方法是测试market应用程序是否已安装,如果未安装,则传递一个URL,实际上您希望测试该URL,看看是否有东西可以处理该意图,但是如果你碰巧有一台没有play store和浏览器的设备,那么我会问为什么用户会首先安装我的应用程序,我想是另一个故事

也许有更好的方法,但以下是对我有效的方法:

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。