【问题标题】:Multiple market handlers cause app not to be found多个市场处理程序导致找不到应用程序
【发布时间】:2014-08-11 16:22:32
【问题描述】:

Google suggests 链接到 Google Play 商店的方式是:

  • market://details?id=<package_name> 如果您在应用程序中, 和
  • http://play.google.com/store/apps/details?id=<package_name>如果 你在一个网页上。

当我们遵循这一策略时,即使 Google Play 商店有我们正在寻找的应用程序,我们也得到了“没有找到这样的应用程序”的祝酒词。

事实证明,这是由两个市场处理者的竞争造成的:F-droid(开源市场)和 Google Play 商店。通过查看 intent resolvers 的包管理器,我发现有多个。

我只希望我的应用可以链接到 Google Play 商店中的应用。 有没有办法强制该应用响应我的market://[...] 链接?

Other strategies 建议尝试一种方法,如果失败,请尝试http://[...] 链接。 (链接的解决方案对我来说失败了,因为没有抛出异常。)

如果我总是通过 http:// 方法链接会出现什么问题?即,跳过market:// 链接,直接在应用程序中使用http://。这个决定以后会不会再次困扰我?

【问题讨论】:

  • 如果 F-Droid 响应 market://,当您的 market:// 链接被点击时,用户应该得到一个选择器,除非他们特别选择 F-Droid 作为该 Intent 结构的默认应用程序.你是说你可以重现发生这种情况的行为,即使没有默认值(或 Play 商店是默认值),market:// 链接也会转到 F-Droid?
  • 我怀疑 F-Droid 被标记为默认值。它在别人的设备上。让他们删除 F-Droid “修复”了问题,但我想要一个更永久的解决方案,因为我没有链接到开源应用程序,而是链接到 Google Play 商店的应用程序。

标签: android google-play


【解决方案1】:

我没有链接到开源应用程序,而是链接到 Google Play 商店的应用程序

不,您正在尝试使用ACTION_VIEW Intent 打开Uri。原则上,欢迎用户使用他们想要的任何东西来处理该请求,就像他们可以使用任何他们想要的应用程序打开 PDF 一样。这是 Android 中为数不多的几个地方之一,我认为有理由尝试强制解决问题并将用户引导到特定应用程序并远离他们通常选择的任何应用程序。

我只希望我的应用可以链接到 Google Play 商店中的应用。有没有办法强制该应用响应我的 market://[...] 链接?

如果您是为此Uri 调用startActivity() 的人,您可以将Intent 包装在Intent.createChooser() 中。如果有多个活动匹配Intent,这将强制显示选择器对话框,避免默认设置。这是最安全、最稳定的方法,因为它不依赖于 Play 商店本身的任何细节。

您可以在Intent 上调用setComponent(),并提供理论上指向所需活动的ComponentName。这是 Google 重构的一大步。

您可以尝试查看setPackage() 是否会将Intent 分辨率限制为您想要的应用程序。再一次,如果 Google 决定切换到不同的包作为其进入 Play 商店的入口点,您将不得不适应。而且我不确定setPackage() 在这种情况下是否受到尊重。

其他策略建议尝试一种方法,如果失败,请尝试http://[...] 链接。 (链接的解决方案对我来说失败了,因为没有抛出异常。)

是的,因为您的问题不是没有匹配项,而是存在多个匹配项,并且做出了另一个选择,而不是您想要的那个。

如果我总是通过 http:// 方法链接会出现什么问题?即,跳过 market:// 链接,直接在应用程序中使用 http://。

这并不能真正解决您的问题,因为还有其他应用程序可以处理 Intent,例如 Web 浏览器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多