在Android中,意图(Intent)**和**过滤器(Intent Filter)是两个核心概念,用于实现组件之间的通信和动态组件匹配。

意图(Intent):

1. 定义: 意图是在组件之间传递消息的对象,它可以用于启动活动、启动服务、发送广播等。

2. 分类: 意图分为显式意图和隐式意图。

    - 显式意图(Explicit Intent): 直接指定要启动的组件的类名。例如,启动一个特定的活动。
        Intent explicitIntent = new Intent(this, TargetActivity.class);
        startActivity(explicitIntent);

    - 隐式意图(Implicit Intent): 不直接指定要启动的组件,而是根据指定的动作、数据等信息,由系统帮助选择合适的组件。
        Intent implicitIntent = new Intent(Intent.ACTION_VIEW);
        implicitIntent.setData(Uri.parse("https://www.example.com"));
        startActivity(implicitIntent);

过滤器(Intent Filter):

1. 定义: 过滤器是组件在清单文件中声明的规则,用于说明组件能够响应哪些类型的意图。

2. 示例: 在清单文件中声明一个活动的过滤器,说明它能够响应VIEW动作和http协议的数据:
    <activity android:name=".TargetActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="http" />
        </intent-filter>
    </activity>

    上述过滤器表明,TargetActivity可以响应VIEW动作,并处理http协议的数据。这样,当一个隐式意图请求打开一个http链接时,系统会选择合适的组件来处理。

使用 Intent 和 Intent Filter:

1. 通过 Intent 启动组件:
    // 显式意图
    Intent explicitIntent = new Intent(this, TargetActivity.class);
    startActivity(explicitIntent);

    // 隐式意图
    Intent implicitIntent = new Intent(Intent.ACTION_VIEW);
    implicitIntent.setData(Uri.parse("https://www.example.com"));
    startActivity(implicitIntent);

2. 在清单文件中声明过滤器:
    <activity android:name=".TargetActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="http" />
        </intent-filter>
    </activity>

通过组合使用意图和过滤器,Android应用程序能够实现灵活的组件通信和动态组件匹配,提供了一种松耦合的方式来构建应用。


转载请注明出处:http://www.pingtaimeng.com/article/detail/9397/Android