zoukankan      html  css  js  c++  java
  • Intent

    Intent

    Intent 作用(两个):

      1. 激活系统组件

        startActivity(Intent)

        startService(Intent)  / stopService(Intent)

        bingService(Intent, ServiceConnection, int)

      2. 在系统组件之间传递数据(依赖于intent的属性)

    Intent 属性(一共6个,常用4个)

        1. ComponentName: 组件名称.  用于显式地指定被激活的组件, 在Intent显示的激活系统组件时, 通过ComponentName属性来完成的.

            例子:  

              Intent intent = new Intent(this, SecondActivity.class);   //  在这里已经很明确的指出我们需要激活的Activity 是SecondActivity

                  / 而这个SecondActivity 变量就是CommentName

              startActivity(intent)

              ==> 等价于:

              Intent intent = new Intent();     

              ComponentName commentName = ComponentName(this, 包名.StartActivity);

              intent.setComponentName(commentName);

              startActivity(intent);     

        2. Action: 动作. 用于隐式地指定被激活的组件, 被激活的组件可以是其他应用的组件, 如果是显示的只能是自己的组件

            例子:

              Intent intent = new Intent();

              intent.setAction(Intent.ACTION_DIAL);  // 隐式激活时, 你不知道激活的到底是哪个Activity, 里面的参数是字符串,

                       /如果是自己的Action, 可以在项目清单(Manifest.xml)中配置action, 然后

                          <intent-filter>

                            <action adroid:name="intent_action" />

                            <action adroid:name="intent_action2" />    // 可以重复写多次同一个属性

                            <category android:name="android.intent.category.DEFAULT" />  // 默认就有

                            <category android:name="hello" />  // 如果在代码中使用了intent.setCategory()这里就需要些多个

                          </intent-filter>

              intent.addCategory("hello");

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

              intent.setData(data);

              startActivity(intent)

        3. Data: 数据. 用于封装数据, 通常与Activity同时使用. 该属性是Uri 类型的, 可以通过Uri.parse(String)获取该类型的数据

        4. Category: 分类. 用于Intent与IntentFilter的过滤 (没什么其他软用)

        5. Extra: 附加数据.  Extra属性的类型是Bundle, 而Bundle的本质是操作HashMap<String, Object>, 由于Bundle中的Map不可以被直接操作,

                 且Bundle提供了一些了API想Map中封装数据, 而Intent的Extra是进阶操作Map的,

              所以Intent是Extra属性可以防止Bundle中约定的数据类型的数据

            例子: 

              intent.putExtra("name", "小明");   // 向intent添加额外数据

              intent.getStringExtra("name");  // 在另一个Activity中获取这个传过来的数据

        6. Flag: 标记,标识. 通常用于激活Activity时, 指定特殊的参数.

            相关方法: setFlags(int), addFlags(int)

    Intent 与 IntentFilter

      IntentFilter 是 "意图过滤器", 用于处理Intent的匹配(拦截/放行), 即使得某些Intent能够成功匹配, 从而放行; 某些Intent不能被匹配, 从而达到拦截

      IntentFilter 对于Intent的匹配通常从Action属性, Category属性进行过滤, 也可以根据Data属性过滤

        如果从Action / Category 进行过滤, 可以简单的认为规则是: IntentFilter中配置的属性比Intent中的只能更多不能更少. (你可以在IntentFilter配置

                                      中写多个action来达到IntentFilter 配置属性比Intent 属性更多)

      注意: 每个Intent对象中默认即存在一个一个category

    Parcelable接口:

      Android 中的Parcelable接口的作用类似于Java中的Serializable接口, 用于实现类的成员的序列化. Java中有序列化接口(自动序列化).

      抽象方法:

        1. describeContents() 保持默认,不需要动它

        2. writeToParcel(Parcel dest) {    // 将数据写入Parcel(放数据的容器)

           dest.writeString(path);

           dest.writeString(name);

          }

      实现步骤:

        1. 自定义类, 实现Parcelable接口

        2. 重写捏的describeContents()方法, 直接返回0即可

        3. 重写的writeToParcel(Parcel, int)方法, 调用穿男生的write洗礼方法向Parcel容器内依次写入本类的各属性

        4. 声明public static final Parcelable.Creator<T> CREATOR常量, 并使用匿名内部类赋值(也可以使用其他内部类语法), 在匿名内部了中, newArray(int)方法直接根据参数创建对应长度的数组createFromParcel(Parcel)中, 创建出本类的对象, 并从参数中依次(与此前写入时保存一直, 先写入先读取, 后写入后读取)读取数据为本类的对象属性赋值.

    注:

    获取包名的方法, getPackageName()

    在配置文件(Manifest.xml)中的Activity属性名命名规则:  "公司域名.action.SECOND"  或 "公司域名.category.HELLO"

  • 相关阅读:
    设置代码ios中根据文本设置label高度设置代码
    程序方法对于UIWindow的认识程序方法
    信息浏览器从Android的浏览器中传递cookie数据到App中信息浏览器
    高度状态栏Android获取状态栏的高度高度状态栏
    网络监听Network Daemon(Android Netd)架构和源码分析网络监听
    文件读取Android02文件的保存与读取文件读取
    地址方法[ios开发]利用有道翻译API实现简单的翻译功能地址方法
    温度调试MAC CPU温度监视及风扇速度控制软件温度调试
    设置打开android开发之快速设置,一键wifi开闭,移动网络开闭,电池设置,飞行模式,………………………………设置打开
    界面更新android 转载 widget点击事件界面更新
  • 原文地址:https://www.cnblogs.com/skjr/p/5815272.html
Copyright © 2011-2022 走看看