Android Intent 用法

来源:互联网 发布:mac怎么改语言 编辑:程序博客网 时间:2024/05/22 13:50

Intent :英文翻译为“意图”

含义也差不多,可以理解为要启动一个或者另一个Activity的“意图”。
当然,启动一个Activity首先需要new Intent();
随后使用startActivity(Intent);来启动这个Activity

Intent 给我们提供了以下几种构造方法。

public Intent(Context packageContext, Class<?> cls)public Intent(String action, Uri uri)public Intent(String action)public Intent(String action, Uri uri, Context packageContext, Class<?> cls)

第一个构造方法:显式调用
Context : 给定启动Activity的上下文
Class : 需要启动的Activity(显示指定的Activity)
例如: 我们要在MainActivity中启动Target Activity

    Intent intent = new Intent(MainActivity.this, TargetActivity.class);    startActivity(intent);

第二和第三个构造皆为隐式调用
action : 为AndroidManifest.xml中注册的Activity里的intent-filter中指定的action
注 : 使用隐式调用同时需要actioncategory同时匹配上才能调用成功。
隐式调用需要进行如下配置

    <intent-filter>        <!-- action android:name里的值可以自定义-->        <action android:name="com.sun.scarecrow.ACTION_TEST"/>        <category android:name="android.intent.category.DEFAULT"/>        <!-- category android:name里的值可以自定义-->        <category android:name="com.sun.scarecrow.CATEGORY_TEST"/>    </intent-filter>

使用:每个intent只能指定要给action,但却能指定多个category

Intent intent= new Intent("com.sun.scarecrow.ACTION_TEST");intent.addCategory("com.sun.scarecrow.CATEGORY_TEST");

注: 因为android.intent.category.DEFAULT为默认的categoriesgory,在调用start Activity()的时候会自动将这个category添加到intent中。
所以如果没有自定义的category的时候可以省略intent.addCategory();。但是xml中的默认category是必须的,不能省略。一旦缺失将不符合隐式匹配规则(* 只有<action>和<category>同时匹配上才能正常响应 *)。
将会出现如下异常:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.sun.scarecrow.ACTION_TEST cat=[com.sun.scarecrow.CATEGORY_TEST] }