1.Intent是Android程序中各组件之间交互的一种方式,不仅可以指明当前活动即将执行的动作,还可以在不同组件之间传递数据
Intent一般用于启动活动、启动服务、以及发送广播
2.Intent用法分为两种:显式和隐式
①显式Intent
Intent intent = newIntent(ActivityA.this,ActivityB.class); //在ActivityA中使用Intent跳转到ActivityB
startActivity(intent);
②隐式Intent:
AndroidManifest.xml
<
activity
android
:name=
".
ActivityB
"
>
<intent-filter> <action android:name="com.example.ActivityB.ACTION_START" /> //定义<action>标签,表示活动ActivityB可以响应的action
</intent-filter> </activity>
ActivityA.java
Intent intent = new Intent(
"com.example.
ActivityB.ACTION_START
"
);
startActivity(intent);
如果新建Intent对象时添加了该语句:intent.addCategory("sth");
则对应即将通过Intent跳转到的活动必须在AndroidManifest.xml中的
<
intent-filter
>标签内注册这个category
3.其他隐式Intent用法:
①打开系统默认浏览器访问对应网址,如百度
Intent intent= new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
//setData()方法用于接收一个Uri对象,用于指定当前Intent正在操作的数据,通常是以字符串形式传入Uri.parse()方法中解析产生的
//可以
在AndroidManifest.xml中的
<
intent-filter
>标签内添加<data>标签,指定该活动可以响应什么类型的数据
//①android:scheme:用于指定数据的协议部分,如 http 部分
//②android:host:指定数据的主机名部分:如
www.baidu.com 部分
//③android:port:指定数据的端口部分,一般在主机名后面的那一部分
//④android:path:指定主机名和端口之后的部分,如网址中跟在域名之后的部分
//⑤android:mimeType:指定可以处理的数据类型,允许使用通配符的方式进行指定
//<
intent-filter
>中包含的标签,通过Intent方式启动该活动的精准度越高
②打开拨号盘
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
4.使用Intent传递数据
ActivityA.java
Intent intent = newIntent(ActivityA.this,ActivityB.class); //在ActivityA中使用Intent跳转到ActivityB
intent.putExtra("data_key",data_value); //添加数据到Intent中
startActivity(intent);
ActivityB.java
Intent intent = getIntent(); //获取Intent对象
String data = intent.getStringExtra("data_key"); //获取活动A中传递过来的数据
//对Intent传递的数据进行操作
5.返回数据给上一个活动
ActivityA.java
Intent intent = newIntent(ActivityA.this,ActivityB.class); //在ActivityA中使用Intent跳转到ActivityB
startActivityForResult(intent,1); //第二个参数是请求码(requestCode),只要是一个唯一值就可以
ActivityB.java
Intent intent = new Intent();
intent.putEtra("data_return"," statement"); //设置向上一个活动返回的数据
setResult(RESULT_OK,intent); // 参数1:返回处理结果(resultCode):RESULT_OK 或者RESULT_CANCELED
finish(); //返回上一个活动
ActivityA.java
protected void onActivityResult(int requestCode, int resultCode,Intent data){
switch(requestCode){
case 1:
if(resultCode == RESULT_OK){
String returnedData = data.getStringExtra("data_return");
}
break;
default:
break;
}
}