我有一个人们用来替代网站的 Android 应用程序。因此,当用户遇到网站的 URL 时,我想让他们选择在我的应用程序中而不是在浏览器中“打开 URL”。换句话说,我希望出现弹出窗口,让他们在我的应用程序和浏览器(可能还有其他应用程序)之间进行选择。
我从各种来源了解到,我需要使用“数据”过滤器将意图过滤器添加到我的应用程序中的活动,该过滤器过滤正确形式的 URL。
有问题的网站是http://members.iracing.com,因此我添加了以下意图过滤器:
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:host="members.iracing.com" />
</intent-filter>
</activity>
我尝试了这些数据过滤器的各种形式,例如使用具有两个属性的单个“数据”节点:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" android:host="members.iracing.com"/>
</intent-filter>
它根本行不通。我不知道还能告诉你什么。我在我的网站上托管了一个简单的 HTML 页面,其中包含指向该网站上各个页面的几个链接(均以“http://members.iracing.com/...”开头),当我单击其中任何一个时,它们就会打开在浏览器中,无需询问我要使用哪个应用程序。我在模拟器上以及在我的物理设备上安装应用程序后都尝试了它,但没有任何效果。我在一个完全空白的新 Android 项目中尝试了这个,只是想看看这是否可行,没有。
然后我意识到该网站需要身份验证,如果您没有登录,它会重定向到https://members.iracing.com/membersite/login.jsp的登录页面,因此我尝试用“https”替换该方案。我什至尝试将主机更改为“www.members.iracing.com”,最后我什至尝试了所有这些东西的组合(不确定这是否可行,但是嘿,我现在很绝望.. ...)
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="members.iracing.com" />
<data android:host="www.members.iracing.com" />
</intent-filter>
还是不行。我不确定重定向是否相关,浏览器显然首先会转到非重定向站点,然后重定向到登录页面,但我无法选择在我的应用程序中打开它。此外,如果我先在浏览器中手动登录,则没有重定向,它仍然不起作用。
我在这里遗漏了一些明显的东西吗?我把头发拉出来为什么这不起作用,除了尝试我能想到的所有可能的组合之外,我无法调试它(我做了......)。谢谢你的帮助!