Android开发之Intent
Intent的介绍
Intent的中文意思是“意图”, Intent是Android的核心和灵魂,是各组件之间通信的桥梁。四大组件分别为Activity 、Service、BroadcastReceiver、ContentProvider。
Intent的组成部分
功能名称 | 设置方法 | 简述 |
---|---|---|
Component | setComponent | 组件(用于指定意图的来源与目标) |
Action | setAction | 动作(指定意图的动作行为) |
Data | setData | Uri(指定动作要操作的数据路径) |
Category | addCategory | 类别(指定意图的操作类别) |
Type | setType | 数据类型(指定消息的数据类型) |
Extras | putExtras | 扩展信息(指定装载的包裹信息) |
Flags | setFlags | 标志位(指定活动的启动标志) |
显示Intent
显示Intent,直接指定来源活动与目标活动。
三种构建方式:
-
在Intent的构造函数中指定
//创建一个目标确定的意图 Intent intent = new Intent(this,Activity.class)
-
调用意图对象的setClass方法指定
Intent intent = new Intent();//创建一个新意图 intent.setClass(this,Activity.class)//设置意图要跳转的目标活动
-
调用意图对象的setComponet方法指定
Intent intent = new Intent();//创建一个新意图
//创建包含目标活动在内的组件名称对象
ComponentName component = new ComponentName(this,Activity.class);//this可以传包名,类名
intent.setComponent(component)//设置意图携带的组件信息
隐式Intent
没有明确指定要跳转的目标活动,只给出一个动作字符串让系统自动匹配,属于模糊匹配。
public void onClick(View view){
Intent intent = new Intent();
String phone = "1433224"
switch(view.getId()){
case R.id.btn_dial:
//设置意图动作为准备拨号
intent.setAction(Intent.Action_DIAL);
//声明一个拨号的Uri
Uri uri = Uri.parse("tel:" + phone)
intent.setData(uri);
startActivity(intent);
break;
case R.id.btn_sms:
//设置意图动作为发短信
intent.setAction(Intent.Action_SENDTO);
//声明一个拨号的Uri
Uri uri2 = Uri.parse("smsto:" + phone);
intent.setData(uri2);
startActivity(intent);
break;
//在另一个APP的Manifest中:
/**<intent-filter>
<action android:name="android.intent.action.YI"/> <category android:name="android.intent.category.DEFAULT"/>
<intent-filter>*/
case R.id.btn_app:
intent.setAction("android.intent.action.YI");
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(intent);
break;
}
}
向Activity传值
sendActivity:
@Override
public void onClick(View view) {
Intent intent = new Intent(this,ReceiveActivity.class);
Bundle bundle = new Bundle();
bundle.putString("request_time", DateUtil.getNowTime());
bundle.putString("request_content",tv_send.getText().toString());
intent.putExtras(bundle);
startActivity(intent);
}
receiveActivity
tv_receive = findViewById(R.id.tv_receive);
//从上一个页面传来的意图中获取快递包裹
Bundle bundle = getIntent().getExtras();
String request_time = bundle.getString("request_time");
String request_content = bundle.getString("request_content");
String tv = String.format("收到请求消息:\n请求时间为%s\n请求内容为%s",request_time,request_content);
tv_receive.setText(tv);
Util:
public class DateUtil {
public static String getNowTime(){
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
return sdf.format(new Date());
}