Intent七大属性:
(1)ComponentName:组件名称(Intent想启动哪一个组件),显式启动Activity
三个构造器:
1)ComponentName cn = new ComponentName(content pkg,class cls);
第一个参数:上下文对象 (content pkg,class cls)
第二个参数:要跳转的类名.class
ComponentName cn = new ComponentName(MainActivity.this, B.class);
2)ComponentName cn = new ComponentName(content pkg,String cls);
第一个参数:上下文对象
第二个参数:要跳转的包名.类名
ComponentName cn = new ComponentName(B.this, “com.niu.intentdemo.C”);
3)ComponentName cn = new ComponentName(String pkg,String cls);
第一个参数:当前类包名
第二个参数: 要跳转的包名.类名
ComponentName cn = new ComponentName(“com.niu.intentdemo”, “com.niu.intentdemo.D”);
【注意:ComponentName构造器中的参数cls,必须要把包名也给加上,不能直接写类名】
使用步骤:在Activity启动之前
// 第一步:初始化ComponentName(有三种方式的构造参数)
ComponentName cn = new ComponentName(MainActivity.this, B.class);
// 第二步:将ComponentName设置到Intent中
Intent intent = new Intent();
intent.setComponent(cn);
// 第三步:startActivity
startActivity(intent);
(2)Action:活动(叫服务员的活动)
ACTION_MAIN:(android.intent.action.MAIN)Android程序入口。每个Android应用必须且只能包含一个此类型的Action声明。【如果设置多个,则哪个在前,执行哪个】
ACTION_VIEW: (android.intent.action.VIEW) 显示指定数据。
ACTION_EDIT: (android.intent.action.EDIT) 编辑指定数据。
ACTION_DIAL:(android.intent.action.DIAL)。调用拨号盘显示要拨打的电话,但是电话没有拨打出去
ACTION_CALL:(android.intent.action.CALL)。调用拨号盘,直接将号码拨打出去。
ACTION_ANSWER: (android.intent.action.ANSWER) 接听来电。
ACTION_SEND: (android.intent.action.SEND) 向其他人发送数据(例如:彩信/email)。
ACTION_SENDTO: (android.intent.action.SENDTO) 向其他人发送短信。
ACTION_SEARCH: (android.intent.action.SEARCH) 执行搜索。
ACTION_GET_CONTENT: (android.intent.action.GET_CONTENT) 让用户选择数据,并返回所选数据
使用:(写在startActivity之前)
//(1)打开浏览器
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
// 添加需要具体显示的指定数据
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
//(2)打开系统相册
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivity(intent);
//(3)发送短信:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT,"要发送的短信内容");
startActivity(intent);
//(4)启动拨打电话
// 启动拨号盘,电话直接拨打出去
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
// 启动拨号盘,电话没有拨打出去
Intent intent = new Intent();
intent.setAction(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
注意:拨打电话权限要获得权限,在清单文件中写
《uses-permission android:name=”android.permission.CALL_PHONE” />
(3)category:类别
(和ACTION一起使用)
CATEGORY_HOME:回到HOME页
CATEGORY_DEFAULT: (android.intent.category.DEFAULT) Android系统中默认的执行方式,按照普通Activity的执行方式执行。
CATEGORY_HOME: (android.intent.category.HOME) 设置该组件为Home Activity。
CATEGORY_PREFERENCE:(android.intent.category.PREFERENCE) 设置该组件为Preference。
CATEGORY_LAUNCHER: (android.intent.category.LAUNCHER) 设置该组件为在当前应用程序启动器中优先级最高的Activity,通常与入口ACTION_MAIN配合使用。
CATEGORY_BROWSABLE: (android.intent.category.BROWSABLE) 设置该组件可以使用浏览器启动
使用:
//Category---HOME-->回到home页
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
(4)Data:一般我们用它来指明数据
intent.setdata();//指明数据
(5)Extra:一般提供额外数据
intent.putExtra();
(6)Type:指定数据的类型
intent.setType(“image/*”);
格式:”image/*”—>获得手机中所有的图片
“audio/*”—>音乐
“video/*”—>视频
“text/plain”—>发送短信
“message/rfc822”—>发送邮件
Demo1:选择系统图片,显示。
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
// 发送数据的ACTION
// 设置要发送数据的类型
intent.setType("image/*");
// 有返回值
startActivityForResult(intent, REQUEST_IMAGE);
/*
* 接收图片选择返回的数据
**/
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_IMAGE && data != null) {
Uri uri = data.getData();
show_image.setImageURI(uri);
}
}
Demo2:发送邮件
intent.setAction(Intent.ACTION_SEND);
// 发送数据的ACTION
// 初始化收件人
String[] to = new String[] { "12345@123.com", "12346@123.com", "12347@123.com" };
// 指定收件人到intent中
intent.putExtra(Intent.EXTRA_EMAIL, to);
// 指定抄送人
intent.putExtra(Intent.EXTRA_CC, "4567@123.com");
// 指定主体
intent.putExtra(Intent.EXTRA_SUBJECT, "今天加班通知");
// 指定youjian内容
intent.putExtra(Intent.EXTRA_TEXT, "亲爱的同时。。。");
// 要设置发送数据的类型
intent.setType("message/rfc822");
startActivity(intent);
(7)Flag:
FLAG_ACTIVITY_CLEAR_TOP:相当于singleTask的启动模式
FLAG_ACTIVITY_NO_HISTORY:使用这种Flag启动的Activity不入栈
FLAG_ACTIVITY_SINGLE_TOP:相当于singleTop的启动模式