当我们使用移动应用时,我们通常会通过点击链接或按钮来跳转到其他页面或应用。
向应用程序传递参数
window.location.href = "mailto:user@example.com";
可以复现的demo
<a href="test://app">Scheme</a>
- Cocos2dxWebView.java
public boolean shouldOverrideUrlLoading(WebView view, final String urlString) { // 用来实现url拦截:true拦截、false不拦截,如果要重定向,再次调用view.loadUrl()即可 // urlString收到的内容如下 // intent://forms.gle/LfrgUveEipbu42uE8 // #Intent; // package=com.google.android.gms; // action=com.google.firebase.dynamiclinks.VIEW_DYNAMIC_LINK; // scheme=https; // S.browser_fallback_url= // https://docs.google.com/xxx // ;end; }
这个intent其实是google play的服务,如果要使用,必须声明intent
- AndroidManifest.xml
<activity> <intent-filter> <action android:name="android.intent.action.MAIN" /> </intent-filter> </activity>
intent-filter
在 Android 开发中,intent-filter
是一个用于指定活动(Activity)、服务(Service)或广播接收器(Broadcast Receiver)能够处理哪些意图(Intent)的声明。通过在清单文件(Manifest file)中使用 intent-filter
,可以使应用程序响应特定类型的意图,从而实现与其他组件的交互和通信。
intent-filter
声明的示例:
<activity android:name=".MyActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http" /> </intent-filter> </activity>
intent-filter
声明了一个活动(MyActivity),它能够处理一个 VIEW 意图,并且指定了对应的数据类型为 HTTP。这意味着当系统收到一个 VIEW 意图来查看某个网页时,这个活动将被启动并处理该意图。
intent-filter
可以通过以下几个元素来定义:
<action>
指 Intent 发向的组件的主要动作,比如:图片应用中主要动作为查看图片的组件、地图应用中主要动作为查看地址的组件。另外,对于广播(Broadcast)组件而言,Intent 的 action 则是指广播具体的值。当 Broadcast Receiver 接收到该值时代表了某事件已经发生。
通常使用的主要是 Android 系统内置 action,这些 action 实际上是保存在 Intent 类中的静态常量,系统的默认组件(如:默认浏览器、图片浏览器、拨号页面等)都可以响应相应的 action。
<category>
目标组件的类型信息字符串,一个 Intent 可以添加多个 Category 。
<data>
包含了 URI 对象和 memitype 两个部分,分别是待操作数据的引用 uri,以及待操作数据的数据类型。两部分均为可选,但是要注意同时设置时应该使用 setDataAndType()
方法,防止互相抵消。
Data 内容一般由 action 决定,比如 action 为 ACTION_VIEW,那么 Data 就可以是一个网址,也可以是图片之类的数据 uri。
同时指定 Uri 和 MIME 类型有助于 Android 系统找到接收 Intent 的最佳组件,例如可以响应 ACTION_VIEW 的组件可能有非常多,浏览器、播放器、图片应用等等。此时设置mimeType
为"image/jpeg"
或者video/mp4
,则系统可以筛选出更合适的响应组件。
通常情况下,需要根据需求为组件添加适当的 intent-filter
来定义它所能处理的意图。这样,当其他应用程序发送对应类型的意图时,系统就会将其分发给相应的组件。一个组件可以有多个 intent-filter
声明,以便处理不同类型的意图。
intent-filter
只能在清单文件中声明,用于将应用程序的组件公开给其他应用程序或系统使用。