Intent用法
Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据
显示Intent
Intent有多个构造函数的重载,其中一个是Intent(Context packageContext, Class<?> cls)
,参数packageContext
代表启动活动的上下文,参数cls
想要启动的目标活动。方法startActivity(Intent intent)
,启动这个意图。
隐式Intent
隐式Intent并不明确指明我们要启动哪一个活动,而是指定一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent,并帮助我们找出合适的活动去启动。
-
我们在
activity
标签下配置intent-filter
标签,可以指定当前活动能够响应的action
和category
<activity android:name="xxxxxxx"> <intent-filter> <action android:name="xxxxxxxxxxx"/> <category android:name="xxxxxxxxxxxxxx"/> <category android:name="xxxxxxxxxxxxxxxxx"/> </intent-filter> > </activity>
只有action
和category
中的内容同时能够匹配上Intent中指定的action和category时,这个活动才能够响应该Intent,每个Intent中只能指定一个action,但却能指定多个category,调用Intent中的addCategory()方法来添加一个category
隐式Intent的高级用法
- 使用隐式Intent,我们不仅可以启动自己程序内的活动,还可以启动其他程序中的活动,这使得Android多个应用程序之间的功能共享成为了可能
调用系统的浏览器
-
系统内置的动作
action
是Intent.ACTION_VIEW
,其常量值为android.intent.action.VIEW
。//创建一个意图对象,指定其action为系统内置浏览器的action Intent intent = new Intent(Intent.ACTION_VIEW); //指定当前action正在操作的数据 intent.setData(Uri.parse("http://www.baidu.com")); //启动活动 startActivity(intent);
setData()
方法: 此方法主要接收一个Uri对象,主要用于指定当前Intent正在操作的数据,而这些数据通常都是以字符串的形势传入到Uri.parse()
方法中解析出来的
调用系统的拨号器
-
系统内置动作
action
是Intent.ACTION_DIAL
//调用系统的内置动作Intent.ACTION_DIAL Intent intent = new Intent(Intent.ACTION_DIAL); //拨打电话使用的tel协议 intent.setData(Uri.parse("tel:10086"));
点击按钮,出现如下界面:
data标签,响应什么类型的数据
与setData()
方法相对应,在<intent-filter>
标签中再配置一个<data>
标签,用于更精确的指定当前活动能够指定什么类型的数据。
-
android:scheme
用于指定数据的协议部分,例:http -
android:host
用于指定数据的主机名部分,例:www.baidu.com -
android:port
用于指定数据的端口部分,一般紧随在主机名之后 -
android:path
用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容
只有<data>
标签中指定的内容和Intent中携带的Data完全一致时,当前活动才能够响应该Intent
设置data标签,可以响应http请求的活动
这个项目的名字叫做ActivityTest
<activity
android:name=".ThirdActivity">
<intent-filter>
<!--action指定为系统内置的动作-->
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<!--设置了data类型为http请求类型-->
<data android:scheme="http"/>
</intent-filter>
</activity>
当发送一个http请求时,就会出现: