Intent安卓中的链条

intent封装看安卓启动程序某个组件的意图,还可以携带数据。是应用程序间组件通信的主要手段。
intent主要包括了Component,Action,Category,Data,Type,Extra,Flag这7中属性。

Component
组件:主要是Activity,Service,BroadcastReceiver。简单来讲Intent是连接两个组件的枢纽,这个枢纽关系就是Component。

ComponentName中三种创建方式:
1.ComponentName(String,String) 
2.ComponentName(Context,String)  
3.ComponentName(Context,Class<?>) 
Intent中提供的方法
1.setClass(<Context ,Class<?>)
2.setClass(Context,String)
3.setClass(String,String)

也可以在创建Intent时直接指定。
Intent intent=new Intent(First.this,Two.class);一般都用这种方法。也称之为显示Intent,他直接指定了intent关系两头的两个组件。

Action Category intent-filter

Action本身是一个字符串,他是一种匹配模式取决于Activity中的intent-filter中的action属性。系统带有的Action(部分)。

ACTION_VIEW 启动一个视图,也是默认模式
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 改变时区警告.  

Category则表示在什么样的环境下执行。

CATEGORY_DEFAULT 默认Category
CATEGORY_BROWSABLE 能被浏览器调用
CATEGORY_LAUNCHER 程序启动页面
CATEGORY_HOME  桌面组件

在XML中配置或者在代码中设置。他们决定了action的启动模式和运行环境。intent-filter中表示这个Activity能被什么样的意图启动,intent设置的属性表示启动一个什么样的组件。两者分属不同的两端。

 <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>

  intent.setAction(Intent.ACTION_ANSWER);
  intent.addCategory(Intent.CATEGORY_APP_BROWSER);

Data Type
Data通常向Action提供操作需要的数据。接受一个Uri对象。
scheme://host:prot/path 协议 主机 端口 路径
Type用于指定Data属性所指定的Uri中对应的MIME类型。可以是自定义MIME类型。 Data和Type会相互覆盖,可以一起设置。同样他们也是一种匹配规则

//打开网页 网页的值是"http://www.baidu.com" 他会匹配适合的应用程序供你选择。
    Intent intent=new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("http://www.baidu.com"));
        startActivity(intent);

这里写图片描述

Extra
intent通过extra来传递数据,不仅可以传递基本类型,集合类型,还可以是序列化类型。存储方式以key-value。可以根据自己的需要传递获取数据。
序列化可以参考java和安卓的序列化

//设置传递的数据 
 intent.putExtra(key,value);
 //获取intent对象获取extra然后根据key获取数据
 getIntent().getExtras().get(Key);

这里写图片描述

这里写图片描述

Flag
为intent添加新的旗标。

FLAG_ACTIVITY_TO_FRONT通过有次标识的FLAG启动的Activity再次启动时不会新建,而是直接把此Activity移动到前台,栈顶。
FlAG_ACTIVITY_TOP相当于SingleTask模式,再次启动会直接移动此activity之上的activity。
FLAG_ACTIVITY_NEW_TASK 创建一个新的Activity,也是默认旗帜。
FLAG_ACTIVITY_NO_ANIMATION 启动不适用过渡动画
FLAG_ACTIVITY_NO_HISTORY 启动的Activity不存放于栈中。
FLAG_ACTIVITY_REORDE_TO_FRONT 带到前台,栈顶 
FLAG_ACTIVITY_SINGLE_TOP  相当于Activity中的singletop 

总之Intent是连接两个组件的枢纽,其中的属性是对关系的整理,匹配,管理。

MARK(17)

太上,下知有之。其次,亲而誉之。其次,畏之。其次,侮之。信不足焉,有不信焉。悠兮其贵言,功成事遂,百姓皆谓∶我自然。

猜你喜欢

转载自blog.csdn.net/joy_chow/article/details/81065842