5

我正在使用带有类似于此处描述的意图过滤器的 Activity,以便能够拦截浏览器中的点击,并为用户提供打开我的应用程序的选项。这是我的代码AndroidManifest.xml

<activity android:name="com.scompt.ScomptIntentFilter">
    <intent-filter>
        <data android:scheme="http" android:host="www.scompt.com" />
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
    </intent-filter>
</activity>

http://www.scompt.com如果我进入浏览器,这将不起作用。页面已加载,就像正常一样。

如果我在命令行中输入以下任一命令,则会在我的应用程序和浏览器之间获得标准选择器,正如我所期望的那样。

adb -d shell am start -d http://www.scompt.com -a android.intent.action.VIEW
adb -d shell am start -d http://www.scompt.com

我还有其他地方可以让它工作吗?我已经验证了我在使用开源hubroid所做的事情,而且我似乎也在做同样的事情。

4

4 回答 4

12

关于意图,用户在浏览器中输入 URL 与点击网页、电子邮件等中的链接之间存在明显差异。

如果您点击浏览器网页上的链接或电子邮件中的链接,则会按预期触发意图。

但是,当用户在浏览器的地址栏中键入 URL 时,Android 认为用户特别希望该 URL 在浏览器中打开,因此不会触发意图。

因此,如果您想测试 URL 和意图过滤器,那么您需要设置一个带有超链接的静态网页,或者向您的手机发送电子邮件。

仔细想想,这个系统的工作方式与 Windows 中的默认浏览器行为类似。想象一下,您的默认浏览器是 Chrome,但您也安装了 Firefox。如果您单击电子邮件中的链接,它将在 Chrome 中打开。但是,如果您打开 Firefox 并在地址栏中输入 URL 并点击“开始”,则它不会在 Chrome 中打开,因为显然您希望该 URL 在 Firefox 中打开。

于 2012-08-17T15:51:24.380 回答
3

http://example.com不是http://www.example.com

尝试在浏览器中输入http://www.example.com看看是否可行。

这是适用于我的清单代码:

<activity
    android:name="MY_APP"
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data
            android:host="MY_HOST"
            android:scheme="MY_SCHEME" />
    </intent-filter>
</activity>
于 2012-05-29T12:29:44.387 回答
1

我在 2014 年 1 月 28 日遇到了与 chrome 浏览器完全相同的问题。在这里查看我的答案

从 android 浏览器启动自定义 android 应用程序

于 2014-01-28T11:53:27.953 回答
1

将 pathPatterns 添加到数据标签:

            <data
                android:host="www.example.com"
                android:scheme="http"
                android:pathPattern=".*">
            </data>

            <data
                android:host="example.com"
                android:scheme="http"
                android:pathPattern=".*">
            </data>
于 2015-07-22T11:35:00.540 回答