Dou*_*nes 5 android intentfilter
好吧,所以我知道还有更多的事情要做。我在这里读过很多答案,它们都说同样的事情,但它对我不起作用。我希望能够使用浏览器中带有自定义 URL 方案的链接打开 Android 应用程序。首先,我使用的是模拟器(实际上是Genymotion),所以我不知道这是否与它有关。我看到的答案一直说我所需要的只是与此类似的东西:
<intent-filter>
<data android:scheme="myapp" android:host="hello"/>
<action android:name="ANDROID.INTENT.ACTION.VIEW"/>
<category android:name="ANDROID.INTENT.CATEGORY.BROWSABLE"/>
<category android:name="ANDROID.INTENT.CATEGORY.DEFAULT"/>
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
我把它放在一个新的空白活动上,而不是主要活动上。
如果我理解正确的话,任何以 开头的 URLmyapp://hello都会使用该意图过滤器打开活动。但是,无论我尝试什么,我都会在浏览器中收到 ERR_UNKNOWN_URL_SCHEME。这是原生的 Android 浏览器,因为我无法将 Chrome 安装在 Genymotion 上(至少免费版本不行)。这是需要 Chrome 的东西吗?这是只能在实际设备上完成的事情吗?我做错了什么吗?
这里有几件事在起作用。
首先,正如 Blackbelt 指出的那样,Android 区分大小写,大多数编程语言和开发环境也是如此。您需要按照这些操作和类别的文档将其更改为正确的情况:
<intent-filter>
<data android:scheme="myapp" android:host="hello"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
其次,并非所有 Web 浏览器都以myapp://相同的方式处理方案。我不知道任何司法管辖区有任何法律强制开发商遵守这些法律。您将遇到三种基本模式:
有些浏览器可以很好地处理它们
当页面链接中使用此类 URL 时,某些浏览器会处理它们,但如果在地址栏中键入 URL,则不会处理它们
有些浏览器不会尝试找到一个活动来处理它们,并且总是失败
Google 的首选替代方案是您使用httporhttps方案,以及您控制的主机和路径。某些浏览器将始终打开该网页,但其他浏览器会检查是否存在宣传支持该 URL 的活动,并让用户选择如何处理它。Android 的“M”版本将提供更多可以绕过选择器的挂钩( “应用程序链接” )。另外,其他应用程序(例如,短信客户端、电子邮件客户端)通常会使http链接可点击,允许用户选择打开您的应用程序,而很少有应用程序会知道这myapp://hello以同样的方式有意义。
| 归档时间: |
|
| 查看次数: |
22328 次 |
| 最近记录: |