zoukankan      html  css  js  c++  java
  • 基础篇:5.熟练掌握Intent机制

      前言

        在讲解Intent之前,先来回顾下之前在哪些方面接触过这东西:

        (1)启动Activity:startActivity(Intent intent);  startActivityForResult(Intent intent);

         (2)发送广播: Context.sendBroadcast(Intent intent); Contxt.sendOrderBroadcast(Intent intent);

           (3)启动或绑定Service:  Context.startService(Intent intent);  Context.bindService(Intent intent);

      由此可见,android的三大组件都是通过Intent进行激活和各组件间进行数据传输,那么何为Intent?!

      Intent简介

      Intent是android程序中传输数据的核心对象,Intent在官方文档中的定义为:执行某操作的一个抽象描述。这个定义理解起来不是很直观。个人更喜欢这个定义:Intent负责对应用中一次操作的动作、动作涉及的数据、附加数据进行描述。Intent起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。

      Intent构成

      (1)ComponentName

        组件名称用来指定为处理Intent对象的组件,可以通过以下三种方法进行设置:

          a)  intent.setComponent(SecondActivity)   参数为要设置的组件名称

          b)  intent.setClass(MainActivity.this,SecondActivity.class)   第一个参数为当前Activity的this对象,第二个参数为要打开的Activity的class对象

          c)  intent.setClassName(MainActivity.this,SecondActivity)   第一个参数为当前Activity的this对象,第二个参数为要打开的Activity类对象

      (2)Action

        用来指明要实施的动作是什么,很大程度上决定了Intent的构建,一些常用的动作如下:

          ACTION_CALL         activity           启动一个电话.
          ACTION_EDIT         activity           显示用户编辑的数据.
          ACTION_MAIN         activity           作为Task中第一个Activity启动
          ACTION_SYNC         activity           同步手机与数据服务器上的数据.
          ACTION_BATTERY_LOW    broadcast receiver      电池电量过低警告.
          ACTION_HEADSET_PLUG     broadcast receiver      插拔耳机警告
          ACTION_SCREEN_ON       broadcast receiver     屏幕变亮警告.
          ACTION_TIMEZONE_CHANGED broadcast receiver     改变时区警告.

        除了官方给出的一些常用动作外,用户也可以自定义自己的动作,自定义动作字符串应包含程序包名的前缀,如com.example.alarm.xxx

        设置动作:  intent.setAction(String action)      获取动作:   intent.getAction(String action)

      (3)Data

        数据是作用在Intent上的数据的URI(通用资源标示符)和数据的MIME类型(已注册的数据类型主要有:application,audio,example,message,model,multipart,text,video),不同的动作有不同的数据规格。

        设置数据:intent.setData(Uri.parse("tel:18620390143"))//设置要拨打的号码

      (4)Extra

        附加数据用来为Intent添加附加信息:

        设置附加数据:  intent.setExtra("name","张光源")  第一个参数为附加信息名称,第二个参数为附加信息值

        获取附加数据:  intent.getExtra("name")   根据附加信息名称,获取相应数据值

      (5)IntentFilter

        隐式Intent(并不指明目标组件名称)需要通过过滤器<intent-filter>进行解析,一个过滤器对英语Intent对象的动作、数据、种类,过滤器需要检测隐式Intent的这三个字段,其中任何一个失败,则为解析失败。然而一个组件可以拥有多个过滤器,在这个过滤器上解析失败,有可能在其它过滤器解析成功。过滤器的使用如下:

           <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <data android:mimeType="video/mpeg" android:scheme="http">
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>

      目前所接触到的Intent操作都是显式Intent(指定compoment),所以对Intent的解析方面了解还不够深入,待后期有更深理解再进行补充。

      附:经常接触的Intent实例:

           Intent intent=new Intent(MainActivity.this,MyAlarmReceiver.class);//指定跳转的Inetent
                intent.setAction("com.example.action.setalarm");//指定intent的action
                sender=PendingIntent.getBroadcast(MainActivity.this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);//指定PendingIntent
           Intent it=new Intent(context,AlarmMessage.class);//定制要跳转的activity
                it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 传递一个新的任务标记
                context.startActivity(it);//启动Intent
  • 相关阅读:
    Zend Framework 2.1.5 中根据服务器的环境配置调用数据库等的不同配置
    在基于 Eclipse 的 IDE 中安装和使用 Emmet(ZenCoding)
    【翻译】Emmet(Zen Coding)官方文档 之六 自定义 Emmet
    【翻译】Emmet(Zen Coding)官方文档 之二 缩写
    【翻译】Emmet(Zen Coding)官方文档 之七 一览表
    【翻译】Emmet(Zen Coding)官方文档 之三 CSS 缩写
    【翻译】Emmet(Zen Coding)官方文档 之四 动作
    【翻译】Emmet(Zen Coding)官方文档 之一 web 编程的必备工具
    Zend Framework 2 时区设置警告问题的解决
    【翻译】Emmet (Zen Coding) 元素类型
  • 原文地址:https://www.cnblogs.com/dream550/p/3891031.html
Copyright © 2011-2022 走看看