安卓有两种启动方式 一种显示启动 一种是隐式启动
1:显示启动
Intent intent = new Intent(ActivityA.this, ActivityB.class);
startActivity(intent);
2:隐式启动 当我们通过h5调起app的时候就需要使用隐式启动
接收隐式 Intent
要公布应用可以接收哪些隐式 Intent,请在清单文件中使用 <intent-filter> 元素为每个应用组件声明一个或多个 Intent 过滤器。每个 Intent 过滤器均根据 Intent 的操作、数据和类别指定自身接受的 Intent 类型。仅当隐式 Intent 可以通过 Intent 过滤器之一传递时,系统才会将该 Intent 传递给应用组件。
请注意: 显式 Intent 始终会传递给其目标,无论组件声明的 Intent 过滤器如何均是如此。
应用组件应当为自身可执行的每个独特作业声明单独的过滤器。例如,图像库应用中的一个 Activity 可能会有两个过滤器,分别用于查看图像和编辑图像。当 Activity 启动时,将检查 Intent 并根据 Intent 中的信息决定具体的行为(例如,是否显示编辑器控件)。
每个 Intent 过滤器均由应用清单文件中的 <intent-filter> 元素定义,并嵌套在相应的应用组件(例如,<activity> 元素)中。在 <intent-filter> 内部,您可以使用以下三个元素中的一个或多个指定要接受的 Intent 类型:
-
在
name属性中,声明接受的 Intent 操作。该值必须是操作的文本字符串值,而不是类常量。 -
使用一个或多个指定数据 URI(
scheme、host、port、path)各个方面和 MIME 类型的属性,声明接受的数据类型。 -
在
name属性中,声明接受的 Intent 类别。该值必须是操作的文本字符串值,而不是类常量。以下是隐式启动的例子
<activity android:name=".ActivityA">
<intent-filter>
<action android:name="android.intent.action.VIEW" /> //可以设置多条只要其中一条匹配就可以打开这个Activity 但是这个是默认的
<action android:name="com.example.action.ACTIVITYA" /> //自定义
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="com.example"//可以设置自己的包名
android:pathPrefix="/open"
android:scheme="example" />
</intent-filter>
</activity>
<data>标签中主要可以配置以下内容。
1. android:scheme
用于指定数据的协议部分。
2. android:host
用于指定数据的主机名部分。
3. android:port
用于指定数据的端口部分,一般紧随在主机名之后。
4. android:path
用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容。
5. android:mimeType
用于指定可以处理的数据类型,允许使用通配符的方式进行指定。只有标签中指定的内容和 Intent 中携带的 Data 完全一致时,当前活动才能够响应该 Intent。不过一般在标签中都不会指定过多的内容,常见的是mimeType和 scheme。
如果是网页打开app的话是这样的:example://com.example/open
如果app打开别的app是这样的:startActivity(new Intent().setAction("com.example.action.ACTIVITYA"));
如果我打开app还要传数据过去呢网页打开的链接是这样的:example://com.example/open?sex=man&age=19
在app内获取参数数据
if (getIntent().getAction().equals("com.example.action.ACTIVITYA")){
Uri data = getIntent().getData();
String sex = data.getQueryParameter("sex");
String age = data.getQueryParameter("age");
}
参考链接: