【问题标题】:How to open any store using android intents / a market URI如何使用 android 意图/市场 URI 打开任何商店
【发布时间】:2020-10-18 22:37:32
【问题描述】:

上下文:我正在开发一个高效的开源 android 启动器 (view on GitHub)。在其settings-activity 中有一个标记为Install apps 的按钮,它应该将用户带到他选择的商店(F-Droid 或 PlayStore)。


目前,该按钮只能打开 PlayStore。这是相应的代码(最小的可重现示例):

// in the install buttons on-click listener:

val storeIntent = Intent(
  Intent.ACTION_VIEW,
  Uri.parse("https://play.google.com/store/apps/")
)
startActivity(storeIntent) // go to the store

StackOverflow 上的其他帖子向我展示了使用 market:// URI (from this answer) 来使用意图打开任何商店(并自动让用户决定他们想去哪个商店)。这是功能性的(并在其他地方用于应用程序)但在这里不是很有帮助,因为我们要打开商店主页/起始页面

普通的market:// URI 不会选择要打开的任何应用程序,并且以market://details 开头的 URI 只能搜索 ?q=、按类别过滤商店 ?c= 并显示应用程序详细信息。


是否有一个 URI / Intent 可用于将用户带到任何商店的主页(系统建议有能力的市场应用程序)?

【问题讨论】:

标签: android kotlin android-intent fdroid


【解决方案1】:

这是对应的代码

请注意,Play 商店应用不需要宣传与此 Intent 结构匹配的 <intent-filter>。这个Intent 可能会启动一个浏览器,如果有一天Play 商店删除了那个<intent-filter>。如果用户没有合适的应用程序(例如,他们正在运行受限配置文件并且无法 Play 商店和 Web 浏览器),它也可能会因ActivityNotFoundException 而崩溃。

是否有一个 URI / Intent 可用于将用户带到任何商店的主页(系统建议有能力的市场应用程序)?

不,只要不要求任何特定应用商店的应用向其他应用宣传它们确实是应用商店。

你可以尝试use CATEGORY_APP_MARKET在选择器中Intent尝试拉入应用商店:

    private fun launchGooglePlay() {
        val intent = Intent.makeMainSelectorActivity(
            Intent.ACTION_MAIN,
            Intent.CATEGORY_APP_MARKET
        )
        try {
            startActivity(intent)
        } catch (e: ActivityNotFoundException) {
            Log.e(tag, "launchGooglePlay()", e)
        }
    }

(来自this gist

但是,根据对 F-Droid 清单的快速扫描,我认为他们不会对此做出回应。如果他们不这样做,您可以为他们的项目做出更改,以便他们这样做。但是,华为、三星或其他应用商店是否支持这种Intent 方法取决于其开发人员。

【讨论】:

  • 感谢您的回答 - 您是对的,F-Droid 安卓应用程序没有响应。改进他们的代码确实是一种选择,但不是一个非常快速的解决方案......我注意到 F-Droid 和 Google Play 都如何接收market:// URI......似乎这些 URI 不能用于去到商店的开始屏幕/主要活动...对我来说似乎有点奇怪(这些 URI 仅链接到应用程序详细信息和搜索查询)...
  • 我还尝试了空的搜索查询市场 URI (market://details?q=) 和其他奇怪的东西来使它工作......带有视图意图的空搜索查询甚至把我带到了 f-droid 主页面,但不适用于谷歌播放......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多