Intent的七大属性

时间:2021-12-13 16:27:01

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.隐式意图匹配原则

Intent中可能包含action.category,data和type,它会携带这些东西,去和手机总的清单文件中Activity的intent-filter去匹配!如果匹配成功,可以打开,有可能一次匹配多个,

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