Intent可以分为两类:
- 显示Intent通过组件名称来指定目标组件。通常用于应用程序内部消息。
- 隐式Intent不指定组件名称。通常用于激活其他应用程序的组件。
通过一个例子来说明,在com.example.usingintents包下创建一个新Activity,命名为Aty1.
可以通过setComponent()来显示的调用,通过组件的名称来调用:
Intent i = new Intent();
i.setComponent(new ComponentName("com.example.usingintents", "com.example.usingintents.Aty1"));
startActivity(i);
可以通过startActivity(Action)来调用,先在AndroidManifest中配置
<span style="white-space:pre"> </span><activity android:name="Aty1">
<intent-filter>
<action android:name="com.example.usingintents.intent.action.Aty1"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
然后调用
Intent intent = new Intent("com.example.usingintents.intent.action.Aty1");
startActivity(intent);
Activity、Service和BroadcastReceiver能定义多个Intent过滤器来通知系统它们可以处理哪些Intent。显示Intent无论是何种内容总可以发送给它的目标,过滤器并不干预。但是,隐式Intent只有在通过组件的Intent过滤器之后才能发送给组件。
Intent过滤器是IntentFilter类的实例。通常不在Java代码中进行设置,而是使用<intent-filter>标签写在应用程序的配置文件(AndroidManifest.xml)中。
- 动作<action>标签
- 种类<category>标签
- 数据<data>标签
在MainActivity中,传递包含动作的隐式Intent
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);//为Intent设置动作
startActivity(intent);
编写AndroidManifest.xml文件,为两个Activity设置不同的Intent过滤器。
<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=".SecondActivity">
<intent-filter >
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>