Intent的作用有三个:
- 启动Activity
- 启动服务(请使用显示intent)
- 传递广播
系统组件都是通过Intent来传递信息,大大降低了耦合性。
1、 Intent的构成
- 组件名称:setClass()、setComponment()、intent的构造函数(传入了要启动的类名)
action(==必选==):要执行的操作的字符串
ACTION_VIEW:启动可以展示信息的某项ACtivity(图库、地图)
ACTION_SEND:“共享”操作(电邮、社交共享)
data:待操作的数据的引用,由数据协议、数据URI、MIME构成
只设置URI,调用 setData(),只设置 MIME 类型,调用 setType()。若要同时设置两者,必须调用setDataAndType()
< scheme>://< host>:< port>/< path>
content://com.example.project:200/folder/subfolder/etc
category:被启动的组件的附加信息
CATEGORY_BROWSABLE:
目标 Activity 允许本身通过 Web浏览器启动,以显示链接引用的数据,如图像或电子邮件。CATEGORY_LAUNCHER:
该 Activity 是任务的初始 Activity,在系统的应用启动器中列出。
以上这些属性就可以定位要启动的应用组件
extra:携带额外键值对信息
当intent的action设置为ACTION_SEND时, 用于发送电子邮件,可用 EXTRA_EMAIL 键指定“目标”收件人,用 EXTRA_SUBJECT 键指定“主题”
flags:如何启动activity
FLAG_ACTIVITY_CLEAR_TASK
该用该flag构成的Intent启动应用时,被启动的Activity所在的栈被清空,事实上该Activity就会位于栈底FLAG_ACTIVITY_CLEAR_TOP
如果栈中存在此Activity则清空该Activity到栈顶活动,事实上他成为栈顶
2、 应用选择器
当有多个组件匹配时的默认情况
// Create the text message with a string
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
sendIntent.setType("text/plain");
// Verify that the intent will resolve to an activity
if (sendIntent.resolveActivity(getPackageManager()) != null) {
startActivity(sendIntent);
}
使用选择器时
// Create intent to show the chooser dialog
Intent chooser = Intent.createChooser(sendIntent, title);
// Verify the original intent will resolve to at least one activity
if (sendIntent.resolveActivity(getPackageManager()) != null) {
startActivity(chooser);
}
3、PendingIntent的作用
- NotificationManager执行Intent
- 主屏幕应用执行Intent
- 未来某一时间要执行的Intent,AlarmManager
推荐阅读:Intent参数详解