Intent 与 Intent过滤器

Intent 是一个消息传递对象,您可以使用它从其他应用组件请求操作

其基本用例主要包括以下三个:

Intent类型

从 Android 5.0(API 级别 21)开始,如果使用隐式 Intent 调用 bindService(),系统会引发异常

构建 Intent

Intent 中包含的主要信息如下:

显式 Intent 示例

// 在 Activity 中执行, 所以 'this' 就是当前的上下文
//  fileUrl 是一个URL, 类似 "http://www.example.com/image.png"
Intent downloadIntent = new Intent(this, DownloadService.class);
downloadIntent.setData(Uri.parse(fileUrl));
startService(downloadIntent);

隐式 Intent 示例

// 创建一条文本消息
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
sendIntent.setType("text/plain");

// 确定这个Intent可以匹配到Activity
if (sendIntent.resolveActivity(getPackageManager()) != null) {
    startActivity(sendIntent);
}

设置选择框标题:

Intent chooser = Intent.createChooser(sendIntent, title);

接收隐式 Intent

以下是一个使用包含 Intent 过滤器的 Activity 声明,当数据类型为文本时,系统将接收 ACTION_SEND Intent :

<activity android:name="ShareActivity">
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="text/plain"/>
    </intent-filter>
</activity>
限制对组件的访问
---
如果必须确保只有您自己的应用才能启动您的某一组件,请针对该组件将 exported 属性设置为 "false"