2012-05-29 79 views
3

我正在使用一个类似于here的意图过滤器的活动,以便拦截浏览器中的点击并让用户可以选择打开我的应用程序。下面是从我AndroidManifest.xml代码:Intent-filter not working from browser

<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上所做的工作,我似乎也在做同样的事情。

+0

的什么样的手机?什么版本的Android?在我的手机和平板电脑上的冰淇淋三明治上,看起来浏览器不再可以启动这样的意图了......我有一个xkcd应用程序,以前这种方式工作,但不再在ICS上。 –

+0

@DrakeClarris这是一款运行2.2的Galaxy S。此外,问题中提到的hubroid应用正在做我想做的事情,所以我不认为这是一个手机/操作系统问题。 –

+0

你有没有得到这个解决?我有这个确切的问题,我相信我的计划和主机是正确的。意图在我运行'adb'命令时起作用,但当我点击与'intent'中定义的URL相匹配的链接时并不起作用。 – ckeeney

回答

2

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> 
+0

好眼,@marmor。在输入问题时这是一个错字。我现在修好了。 –

+0

尝试将方案更改为像scompt这样独特的内容,然后在浏览器中输入scompt://www.scompt.com。如果这样做,浏览器可能不会弹出选择器来识别类型如http或https。 – marmor

+0

我也尝试过一个没有成功的自定义方案。正如问题中提到的那样,浏览器能够做我想做的事情,因为它为轮毂应用程序这样做。 –

10

至于意图有输入网址到浏览器,并按照网页,电子邮件等链接的用户之间的明显差异

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

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

所以,如果你想测试网址和意图过滤器,那么你需要设置一个带有超链接的静态网页或发送电子邮件到你的手机。

当您考虑它时,该系统的工作方式与Windows中的默认浏览器行为类似。假设您的默认浏览器是Chrome,但您也安装了Firefox。如果您点击电子邮件中的链接,它会在Chrome中打开。但是,如果您打开Firefox并在地址栏中输入网址并点击它,则Chrome浏览器不会打开,因为您显然希望在Firefox中打开URL。

+0

你知道这是如何工作的网页重定向?说如果www.abc.com重定向到www.xyz.com,我的应用程序可以处理www.xyz.com,我会选择使用我的应用程序吗? –

0

添加pathPatterns数据标签:

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

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