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)
太上,下知有之。其次,亲而誉之。其次,畏之。其次,侮之。信不足焉,有不信焉。悠兮其贵言,功成事遂,百姓皆谓∶我自然。