在Android 中,Intent用来封装两个Activity之间的调用意图,实现两个Activity之间的跳转,并传递信息。

Intent的七大重要属性:ComponentName Action  Category  Data  Type Extra  Flag

 

1、ComponentName :Intent 通过该属性标识要跳转的组件,而明确指出ComponentName 的为显示Intent,而没有明确指定ComponentName 的为隐示Intent。

//显示意图

Intent intent = new Intent(FirstActivity.this,SecondActivity.class);

startActivity(intent);

//隐示,此时Intent会根据指定规则启动符合条件的组件

intent.setAction(Intent.ACTION_CALL);

startActivity(intent);

2、Action   Category  

通常这两项会结合使用,在主配置文件的intent-filter标签下使用这两个标签。这种方式实现了Activity和Intent之间的分离,耦合度降低。

<activity
  android:name=".MainActivity"
  android:label="@string/app_name" >
  <intent-filter>
    <action android:name="MainActivity" />

    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>

//启动Intent

Intent intent = new Intent();

intent.setAction("MainActivity");

startActivity(intent);

 

  Intent对象不仅可以启动本应用内的程序组件,也可以启动Android系统的其他应用的组件,包括系统内置的程序组件(需要设置权限)。

    •   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) 直接呼叫Data中所带的号码。
    •   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) 让用户选择数据,并返回所选数据。

 

3、常用Category属性常量 

   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) 设置该组件可以使用浏览器启动。

 

在代码中可以通过Intent.addCategory()方法给Intent添加Category

 

4、系统内置的几个Data属性常量:

 tel://:号码数据格式,后跟电话号码。

 mailto://:邮件数据格式,后跟邮件收件人地址。

 smsto://:短息数据格式,后跟短信接收号码。

 content://:内容数据格式,后跟需要读取的内容。

  file://:文件数据格式,后跟文件路径。

  market://search?q=pname:pkgname:市场数据格式,在Google Market里搜索包名为pkgname的应用。

  geo://latitude, longitude:经纬数据格式,在地图上显示经纬度所指定的位置。

 

例:

Intent intent=new Intent();

intent.setAction(Intent.ACTION_CALL);

Uri uri = Uri.parse("tel://10086");

intent.setData(uri);

startActivity(intent);

 

5、Type

用于指定Data数据的MIME类型。

//播放视频

uri = Uri.parse("mnt/sdcard/video.3gp");
intent.setDataAndType(uri, "video/*");

6、系统内置的几个Extra常量:

  •   EXTRA_BCC:存放邮件密送人地址的字符串数组。
  •   EXTRA_CC:存放邮件抄送人地址的字符串数组。
  •   EXTRA_EMAIL:存放邮件地址的字符串数组。
  •   EXTRA_SUBJECT:存放邮件主题字符串。
  •   EXTRA_TEXT:存放邮件内容。
  •   EXTRA_KEY_EVENT:以KeyEvent对象方式存放触发Intent的按键。
  •   EXTRA_PHONE_NUMBER:存放调用ACTION_CALL时的电话号码。

//发送的短信

intent.setAction(Intent.ACTION_SENDTO);
uri = Uri.parse("sms:10086");
intent.setData(uri);
intent.putExtra("sms_body", "haha");

7、Flag

Intent可调用addFlags()方法来为Intent添加控制标记。
 
FLAG_ACTIVITY_CLEAR_TOP:同singleTask
FLAG_ACTIVITY_SINGLE_TOP:singleTop
FLAG_ACTIVITY_NEW_TASK:同standard
 
 FLAG_ACTIVITY_MULTIPLE_TASK
 FLAG_ACTIVITY_BROUGHT_TO_FRONT
 FLAG_ACTIVITY_RESET_TASK_IF_NEEDED

 

 

 

 

 

 

 

 

 

posted on 2016-09-27 20:27  爱睡觉的杨小姐  阅读(400)  评论(0编辑  收藏  举报