隐式启动

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>

猜你喜欢

转载自blog.csdn.net/Sun_0117/article/details/82215264