Android 意图(Intent)和过滤器(Filter)
Android 意图(Intent)和过滤器(Filter)
Android意图是⼀个要执⾏的操作的抽象描述。它可以通过 startActivity 来启动⼀个活
动,broadcastIntent 来发送⼴播到 何对它感兴趣的⼴播接受器组件,
startService(Intent) 或者bindService(Intent , ServiceConnection , int) 来与后台服务通
讯。
意图本⾝ (⼀个 Intent 对象)是⼀个被动的数据结构,保存着要执⾏操作的抽象描
述。
例如,你有⼀个活动,需要打开邮件客户端并通过 Android 设备来发送邮件。为了这
个⽬的,你的活动需要发送⼀个带有合适选择器的 ACTION_SEND 到 Android 意图处
理者。指定的选择器给定合适的界⾯来让⽤户决定如何发送他的邮件数据。
Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"
email.putE tra(Intent.EXTRA_EMAIL, recipients);
email.putE tra(Intent.EXTRA_SUBJECT, subject.getTe t().toString())
email.putE tra(Intent.EXTRA_TEXT, body .getTe t().toString());
startActivity(Intent.createChooser(email, "Choose an email client
上⾯的语法调⽤ startActivity ⽅法来开启邮件活动,代码运⾏结果看起来像这样:
例如,你有⼀个活动,需要在 Android 设备上通过浏览器打开⼀个URL 。为了这个⽬
的,你的活动发送 ACTION_WE _SEARCH 意图到 Android 意图处理器来在浏览器中
打开给定的 URL 。意图处理器通过解析⼀系列活动,并选择最适合你的意图的⼀个
活动,在这个例⼦中,是 Web 浏览器活动。意图处理器传递你的⽹页地址到 Web 浏
览器,并打开 Web 浏览器活动。
String q = "http://www .";
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH );
intent.putE tra(SearchManager.QUERY, q);
startActivity(intent);
上⾯的例⼦将在Android搜索引擎上查找"www .uprogrammer .cn" ,并在⼀个活动上给出
关键词的结果。
对于每⼀个组件-活动,服务,⼴播接收器都有独⽴的机制来传递意图。
序
⽅法和描述
号
1 Context .startActivity():意图传递给该⽅法,⽤于启动⼀个新的活动或者让已存在
的活动做⼀些新的事情。
2 Context .startService():意图传递给该⽅法,将初始化⼀个服务,或者新的信息到⼀
个持续存在的服务。
3 Context .send roadcast():意图传递给该⽅法,信息将传递到所有对此感兴趣的⼴
播接收器。
意图对象
意图对象是⼀包的信息,⽤于组件接收到的意图就像 Android 系统接受到的信息。
意图对象包括如下的组件,具体取决于要通信或者执⾏什么。
动作(Action)
这是意图对象中必须的部分,被表现为⼀个字符串。在⼴播的意图中,动作⼀旦发
⽣,将会被报告。动作将很⼤程度上决定意图的其他部分如何被组织。Intent 类定义
了⼀系列动作常量对应不同的意图。这⾥是⼀份Android意图标准动作列表。
意图对象中的动作可以通过 setAction() ⽅法来设置,通过 getAction() ⽅法来读取。
数据(Data)
添加数据规格到意图过滤器。这个规格可以只是⼀个数据类型(如元类型属性) ,⼀条
URI ,或者同时包括数据类型和 URI 。 URI 则由不同部分的属性来指定。
这些指定 URL 格式的属性是可选的,但是也相互独⽴ -
如果意图过滤器没有指定模式,所有其他的 URI 属性将被忽略。
如果没有为过滤器指定主机,端⼜属性和所有路径属性将被忽略。
setData() ⽅法只能以