Intent
Intent的作用范围:Intent会作用于,同一个手机中所有的应用!!七大属性
Intent中Extra属性 :传值时候使用
Intent中Flags属性 : 代码中设置启动模式。 intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);设置启动模式是栈顶单例
Intent中Action属性
Intent中Category属性
Intent中Data属性
Intent中Type属性
Intent中的ComponentName属性:自己封装,借助intent的setComponent()方法,用于显示意图!
设置到Intent: ComponentName componentName = new ComponentName(MainActivity.this, SecondActivity.class);
intent.setComponent(componentName);
本程序内的跳转
//1.利用ComponentName 显示意图跳转
Intent intent = new Intent(MainActivity.this,SecondeActivity.class);
startActivity(intent);
//2.显示意图跳转
Intent intent1 = new Intent();
intent1.setClass(MainActivity.this, SecondeActivity.class);
startActivity(intent1);
//3.显示意图跳转
Intent intent2 = new Intent();
ComponentName cName = new ComponentName(MainActivity.this, SecondeActivity.class);
intent2.setComponent(cName); //设置组件名
startActivity(intent2); //开启意图
跳转至其他程序
//利用显示意图,跳转到其他程序的Activity
Intent intent3 = new Intent();
//注意:目标程序已经在手机安装过
//参数1: 目标程序的包名 (清单文件中)
//参数2: 目标程序Activity的全路径
ComponentName componentName = new ComponentName("com.example.android_launch",
"com.example.MainActivity" );
intent3.setComponent(componentName);
startActivity(intent3);
Intent隐式意图
1.隐式意图匹配原则
2.什么情况叫匹配成功??
intent-filter 中可能包含 action category data type 要求Intent所携带的 action category data type和intent-filter 全部匹配成功!才算Intent和 intent-filter匹配成功,可以打开对应的组件!!3.具体内容匹配
Action匹配原则:1.Intent中只能携带一个Action(setAction会覆盖)
2.Intent中所携带的Action在Intent-filter中包含,就算匹配成功!
Category匹配原则:
1.Intent中能携带多个Category
2.Intent会默认携带一个DEFAULT
3.Intent中所携带的Category在Intent-filter中全部包含,才算匹配成功!
4.因为Intent中会自动携带DEFAULT,如果希望intent-filter被匹配成功,就必须添加一个default category
Type匹配原则:
如果intent-filter 添加了data 并添加了mimetype 那么需要Intent添加type属性去匹配
1.Intent中的type只要在intent-filter mimetype的范围内就算匹配成功!
Data匹配的原则:
Uri.parse(String) 字符串转成 Uri
如果intent-filr的data添加了scheme,那么intent要通过setData设置scheme相匹配的Uri
注意: Intent的 setType()和setData()互相置空,
如果intent中需要添加data和type两个数据,不能单独的调用这两个方法!
解决方法:使用 setDataAndType()方法代替setType。
最后:
如果Activity中有多个intent-filter
那么Intent只要匹配其中一个intent-filter即可!
练习
匹配系统的Activity,通过隐式意图!1.打电话页面
Action: Intent.ACTION_CALL
permission: android.permission.CALL_PHONE
data: tel:具体的电话号
2.拨号页面
Action: Intent.ACTION_DIAL
data: tel:具体的电话号
3.发短信
ACTION: Intent.ACTION_SENDTO
data: smsto:具体电话号
extra: sms_body 内容
4.设置Wifi
Action: Settings.ACTION_WIFI_SETTINGS
注意:Settings android.provider
5.设置页面
Action: Settings.ACTION_WSETTINGS
注意:Settings android.provider
6.打开照相机
MediaStore多媒体Action所在的位置
Action: MediaStore.ACTION_IMAGE_CAPTURE
7.开打一个本地的文件
Action: Intent.ACTION_VIEW
data and type:
Uri打开本地文件有两种写法
1.直接转化路径 file:///sdcard/download/ml.mp4
2.直接把文件转化成Uri
type 根绝MimeType类型添加
8.打开home页面
Action: Intent.ACTION_MAIN
Category: Intent.CATEGORY_HOME