• Android之Intent


    前言:大家都知道Android程序的实现一般都由四大组件构成:

    1. Activity :Android程序实现功能的主体,提供了和客户交互的界面,也提供了和后台交互的功能。
    2. Service :是一个没有界面的activity,主要用于后台运行的程序。
    3. Broadcast :是当前程序和系统之间通信的工具。
    4. ContentProvider :android程序,管理资源的一种工具。  

     上面这4个组件都需要在manifest里面注册才能够使用,manifest就相当于android程序的大管家。当然光有组件还不够,要想实现组件与组件之间数据(或叫资源)的传递,离不开一个关键“人物”,那就是Intent类。至于什么是Intent呢?下面我就简单的跟大家介绍一下。

      一、什么是Intent?

          Intent这个单词在英文里的意思是“目的,意图”。放在计算机里是什么意思呢?简单来说就是,Android系统建立了一种机制来协助应用程序之间数据(或资源)的传递和通信。那么怎么传递呢?不用担心,Android为此创建了一个类,那就是Intent。你可以把它看成一个桥梁或纽带,它以应用程序之间和上述4大组件之间的数据交互为使命。所以它的意图很明显了,就是数据(资源)的传递。

          Intent在程序当中又是一种运行时绑定机制,也就是说它可以在程序运行的时候连接任意两个不同组件。通过Intent,你可以向Android系统进行请求,Android系统会根据你的请求内容选择相应的组件进行响应。

          还有一个原因,之所以要用Intent来建立连接,就是为了降低程序之间的耦合度。(耦合就是指两个应用程序之间的依赖关系)

      二、创建Intent的三种方式:

          1. Intent intent = new Intent(起始组件对象,目标组件类.class)

          2. Intent intent = new Intent()

              Intent.setClass(起始组件对象,目标组件对象.class)

          3. 获取上一个Activity传递过来的intent对象(Intent = getIntent())

      三、Intent类中包括的一些成员变量(或者属性)

          1.mComponent (目的组件):它是ComponentName的类型,是制订组件间跳转的源组件和目标组件的包名,用于显示意图。它明确指定了Intent目标组件的类名称。这个组件包括包名称和类名称,而且必须要声明在manifest文件中。

          2.mAction(动作):它表示操作的动作,是一个字符串常量。它是一个默认的字符串,是提前预定义好的,就是让所在当前这个activity为项目的入口,并且需要在Manifest文件中的intent-filter标签中设置。

          3.mCategory(类别) : 被启动组件的类别。一个Intent中可以包含多个category描述的信息。要注意,在manifest文件中要同时注册action和category才行,它们一般一起使用,在代码当中,如果没有指定category的话,就必须使用默认的Category。

          4.mData(数据): 该参数是Uri类型存放操作的数据,就是比如:访问的网址,拨打电话等,作用就是向Action提供操作的数据。所谓Uri就是统一资源标识符(包括:http://;主机名;资源索引值;),android框架系统定义了Uri类来处理Intent对象要操作的数据。

          5.mType(数据类型): 显示指定数据类型(MIME)。一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显示指定类型而不再进行推导。一般前面是大类型后面是小类型。

           Type属性在Xml文件中只能够命名为mimeType:(下图为例)

     1 <intent-filter>
     2                 <action android:name="com.jaoco.SECOND_ACTIVITY" />
     3                 <category android:name="android.intent.category.DEFAULT" />
     4                 <data 
     5                     android:scheme="http"
     6                     android:host="www.jaovo.com"
     7                     android:path="/android"
     8                     android:port="8090"
     9                     android:mimeType="image/png"
    10                     />
    11 </intent-filter>
    View Code

    设置Type属性值的方法:public void setType(String type)

           设置data和type属性值的方法:public void setDataAndType(Uri uri,String type)如果要同时设置Data和Type的值,只能用这个方法,因为setType()和setData()都会默认将对方设置为null。

          6.mExtras(扩展信息):Intent类中携带的所有的数据都包装在这个类中。

          7.mFlags(标志位):它是一个期望意图运行的模式。

  • 相关阅读:
    AGC030 简要题解
    CF1601 简要题解
    CSP2021 题解
    2021.11.1-2021.11.7总结
    超快速梅森旋转SFMT(SIMD-oriented Fast Mersenne Twister)一览
    2021.10.25-2021.10.31总结
    CSP 2021 游记
    在Windows vs2015环境下编译使用Libevent
    在Windows环境下实现一个简单的libevent服务器
    Thinking in C++ 课后习题自己实现 第二章
  • 原文地址:https://www.cnblogs.com/UniqueColor/p/4731477.html
Copyright © 2020-2023  润新知