【问题标题】:Catching market search intents?捕捉市场搜索意图?
【发布时间】:2010-01-07 21:28:56
【问题描述】:

我正在尝试捕捉 Android Market 搜索意图。

这就是您启动 Android Market 并按包名称搜索应用程序的方式:

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:com.google.somepackage")));

现在,这是我的一项活动的意图过滤器:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="market" android:host="search" />
</intent-filter>

我希望 Android 会询问我应该由哪个应用处理未发生的意图。
但是,如果我将 market 替换为 market1 或将 search 替换为 search1,在这两个地方,我的活动都会启动。
是否有“不可触碰”的意图或其他概念?

TIA。

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    这确实很奇怪,而且有点违背整个开放意图系统。我知道有些广播只有系统才能创建,但我没有听说过这样的意图解析。

    无论如何,我只是将 Market APK 转储到我的 HTC Hero 上并检查了清单。通过添加路径,它们的 URI 匹配更加具体:

    <intent-filter android:priority="100">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="http" 
              android:host="market.android.com" android:path="/search" />
        <data android:scheme="market"
              android:host="search" android:path="" />
    </intent-filter>
    

    但是,我尝试将其添加到我的应用程序中,但我增加了优先级值 (not that I've seen that have any effect before),但我仍然无法捕获 Intent

    希望有人(或 AOSP)能对这种情况有所了解...

    【讨论】:

    • 通过这样设置优先级,任何第三方应用程序都无法拦截意图。只有安装在系统分区中的应用才能被授予 > 0 的优先级。
    • 啊哈!非常感谢您提供的信息。
    • @hackbod 如果可以添加到文档中会很好developer.android.com/guide/topics/manifest/…
    • Mirko:我昨天在 Android 问题列表中提交了一个指向此评论的错误 :)
    • 只是在这方面添加更多数据。似乎系统分区上的应用可以定义优先级大于0的&lt;receiver&gt;。这会导致广播在系统应用之前被排序和接收。请注意,我没有尝试过问题中提到的&lt;activity&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-07
    • 2013-07-17
    • 1970-01-01
    相关资源
    最近更新 更多