我正在使用带有 Intent 过滤器的“Activity ”,该过滤器类似于here所述的过滤器,能够拦截浏览器中的点击,并为用户提供打开我的应用程序的选项。这是我的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所做的事情,而且似乎也在做同样的事情。
最佳答案
关于 Intent ,用户在浏览器中输入URL和跟随网页,电子邮件等中的链接之间存在明显的区别。
如果您遵循浏览器网页上的链接或电子邮件中的链接,则将按预期触发 Intent 。
但是,当用户在其浏览器的地址栏中键入URL时,Android会认为该用户特别希望在浏览器中打开该URL,因此不会触发 Intent 。
因此,如果您要测试URL和 Intent 过滤器,则需要设置一个带有超链接的静态网页,或者向您的手机发送电子邮件。
当您考虑它时,该系统的工作方式与Windows中默认的浏览器行为类似。假设您的默认浏览器是Chrome,但同时也安装了Firefox。如果您单击电子邮件中的链接,它将在Chrome中打开。但是,如果您打开Firefox并在地址栏中键入URL,然后单击go,则它不会在Chrome中打开,因为显然您希望该URL在Firefox中打开。