1.什么是隐式Intent ?
在安卓中分为显式启动和隐式启动
显式Intent:直接指定目标组件的ComponentName(组件名),调用setComponent()、setClass()、setClassName()明确指定组件名。
隐式Intent:没有明确指定组件名的Intent为隐式意图。比如调用Action去拨打电话,打开网页。安卓系统中会根据你设定的动作ACtion、类别、数据等等特征去找到合适的组件去处理你的意图。
2.隐式意图使用场景
显式Intent:适合启动同一个应用程序中其他组件
隐式Intent:适合启动设备中不同应用中的组件
3.隐式Intent如何使用?
在隐式启动中,由于没有明确指定组件名称,系统不知道将该意图发送给哪个组件,于是系统就直接把它发出去了,那么正常来说,所有组件都有权接收。这个时候就需要定义一个组件,这个组件可以接收什么样的意图,所有这时候就引入了IntentFilter(意图过滤器)。
IntentFilter 描述了一个组件意愿接收什么样的Intent对象,告诉Activity可以响应什么类型的Intent。IntentFilter是一个类,在安卓中是以一个标签的形式出现的。匹配一般是根据过滤器中的Action、Data、Category匹配
Action
一个Intent对象只能命名单一的Action,一个IntentFilter可以列出多个Action
一个过滤器必须包含一个,否则它将阻止所有的Intent通过
Category
一个Intent对象包含的Category都能在IntentFilter中找到。一个Intent对象只能命名单一的Category,一个IntentFilter可以列出多个Category。
一个隐式Intent自动加上了一个默认的”android.intent.category.DEFAULT”
Data
Scheme://host:port/path
Intent中的URI和IntentFilter中的URI比较多时,只比较IntentFilter中实际定义的部分属性
方法步骤:
第一种隐式启动同一应用中的Activity
(1)首先在清单中的application标签中写下目标组件的activity标签,再在activity标签中添加intent-filter过滤器标签,最后在intent-filter中添加action/data/category
效果图:
主要文件:
代码如下:
布局代码:
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动同一应用其他组件"
android:onClick="click" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动不同应用其他组件"
android:onClick="click" />
MainActivity代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
public void click(View view){
switch (view.getId()) {
case R.id.button1:
Intent intent=new Intent();
intent.setAction("com.xiaocai.com");
startActivity(intent);
break;
case R.id.button2:
Intent intent01=new Intent();
intent01.setAction("android.intent.action");
startActivity(intent01);
break;
}
}
}
OtherActivity.java代码:
public class OtherActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_other);
}
}
清单文件主要代码:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".OtherActivity">
<intent-filter >
<action android:name="com.xiaocai.com"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
</application>