Intent简介
来源:互联网 发布:易建联nba数据虎扑 编辑:程序博客网 时间:2024/05/01 04:25
- Intent可以用来启动Activity(startActivity(Intent))、Serveice(startService(Intent))等组件,可以用作绑定Activity和Service以建立它们之间的通信(bindServiceConnaction(Intent,ServiceConnection,int)),可以作为broadcastIntent发送给广播接收器(sendBroadcast(Intent))。
主要属性
Action
执行的动作类型。在定义自定义action时,需要包含app的包名,例如:staticfinalString ACTION_TIMETRAVEL ="com.example.action.TIMETRAVEL";Activity Actions
ACTION_MAIN
程序的入口ACTION_VIEW
自动以最合适的方式显示DataACTION_EDIT
提供编辑Data的权限ACTION_PICK
选择一个一条Data,并且返回它
ACTION_DAIL
显示Data指向的号码在拨号界面Dailer上
ACTION_CALL
拨打Data指向的号码
ACTION_SEND
发送Data到指定的地方
ACTION_SENDTO
发送多组Data到指定的地方
ACTION_RUN
运行Data,不管Data是什么
ACTION_SEARCH
执行搜索
ACTION_WEB_SEARCH
执行网上搜索ACRION_SYNC
执同步一个DataACTION_INSERT添加一个空的项到容器中Broadcast Actions
ACTION_TIME_TICK
当前时间改变,并即时发送时间,只能通过系统发送。调用格式"android.intent.action.TIME_TICK"ACTION_TIME_CHENGED
设置时间。调用格式”android.intent.action.TIME_SET"
Data
操作数据,包括了Uri类型数据和MIME Type类型数据。数据域应该和action要匹配。次要属性
category(类别)
这是Action的附加信息,它可以进一步的明确一个Intent。
CATEGORY_DEFAULT把一个组件Component设为可被implicit启动的。CATEGORY_LAUNCHER把一个action设置为在顶级执行。并且包含这个属性的Activity所定义的icon将取代application中定义的icon。CATEGORY_BROWSABLE
当Intent指向网络相关时,必须要添加这个类别。
CATEGORY_HOME
使Intent指向Home。CATEGORY_PREFERENCE
定义的Activity是一个偏好面板Preference Panel。type(数据类型)
显示的指定Intent的数据类型,而跳过了通过Uri进行推导判断的步骤。如:Vedio、Image、Voice等
component(组件)
指定Intent的目标组件名称,当指定了这个属性后,系统将跳过匹配其他属性,而直接匹配这个属性来启动对应的组件。
extras(附加信息)
可以附加一些数据在Intent中。- IntentFilter意图过滤器要匹配Intent,需要在Manifest.xml文件中指明相应的Action、Categroy、Type(这是一种Data的属性)来过滤匹配,如果一个Intent包涵多个Category属性,那么想要匹配它的组件就需要在<intent-filter>标签中也同样指明这些属性。
- 如果没有明确的指定Intent的指向Data数据的Uri,那么可以给他指定Uri的属性,包括:scheme、host、port、path。一条Uri的结构是这样的:<scheme>://<host>:<port>/<path>
<data android:scheme="content"
android:host="com.icechen.mydemo"
android:port="200"
android:path="/folder/subfolder/etc"/>Uri的这几个属性是线性关系,上一级未指定,那么下一级就会失效。
当一个意图过滤器IntentFilter包含Uri其中一个或多个属性时,拥有这些属性的Intent将都能通过过滤器。
- 通过setFlags(int)或者addFlags(int)可以把标签flags用在Intent中。
Intent(Intent o)
通过复制一个Intent来构造Intent(String action)
构造一个指定action的Intent对象Intent(String action,Uri uri)
构造一个指定action,并且有指向数据的uri的Intent对象
Intent(Context packageContext,Clsaa<?>class)
构造一个有指定Component属性的Intent
Intent(String action,Uri uri,Context packageContext,Class<?>class)
构造一个有指定的Conponent属性,并且有指定action和指定data的uri的Intent
常用方法:
addCategory(String Category)
添加一条Category属性
addFlags(int Flags)
添加一条Flag标签clone()
复制一个Object类型的对象getExtras()
获得一个Bundle对象
getSourceBounds()
获得发送Intent的组件的边界坐标
makeMainActivity(ComponentName mainActivity)
创建一个Category属性为luancher的Intent去启动mainActivityparseUri(String uri,int flags)
通过解析一个uri获得一个Intent对象
setComponent()
添加component属性
setClass()
相当于添加component属性
setClassName()
相当于添加component属性
resolveActivity(PackageManager)
解析Intent启动的Activity,返回ComponentName对象
createChooser(Intent target,CharSequence title)创建一个有选择对话框的IntentgetData()、setType()
getData()、getType()
设置/获得Data/Type类型的数据Intent的两种主要形式:
显示意图Explicit Intent:
直接指定了Intent的Component属性。
如果不想app中的组件被其他app启动,在manifest.xml中将组件的android:explicit属性设置为false。
Intent i = new Intent(Context,Activity.class); //注意,此处名字必须与java文件完全一致。
隐式意图Implicit Intent:
没有指定Component属性,所以它必须包含足够的信息去告诉System应该去匹配运行哪一个组件。
- 启动Service只能使用Explicit显示意图,否则在Android5.0以后会报错。在<service>标签中,不要添加意图过滤器,即<intent-filter>标签。
- 当需要同时设置Intent的Type类别和Uri类别时,只能使用setDataAndType(Uri data,String type)方法,分开设置是无效的。
- 当使用implicit隐式意图去启动一个app时,应该调用Intent对象的resolveActivity(getPackageManager)来获取所启动的类,并判断是否存在,如果不存在需要程序会崩溃;所以需要判断返回的对象不为空后才能调用startActivity(Intent)。
- 使用createChooser(Intent,charSequence)方法创建Intent,然后调用startActivity(),当有多个匹配时,会弹出选择对话框供用户选择。
- PackageManager提供了一系列查询可以响应Intent的组件的方法:queryIntentActivity()、queryIntentServices()、queryBroadcastReceiver()。
- Panding Intent?
使用Intent的Extral属性传递数据:
i.putExtral(键,值);//在意图中绑定一个数据,参数说明:
第一个参数是第二个参数的标签;
第二个参数是要传递的值。
startActivity(i);//启动一个Activity。 i = getIntent();//获得启动该活动的Intent对象。
i.getObjexctExtra(键);//获得Intent对象中的指定数据。参数说明:
该参数就是之前定义的键,通过该方法来获得其对应的数据。
使用Bundle类(一个数据包)传递数据:
传出时:
Boudle bundle1 = new Bundle();//创建一个Bundle对象。
bundle1.put(键1-值1);把一个键值数据对添加到Bundle对象中。
bundle1.put(键2-值2);
Bundle bundle2 = new Bundle();
bundle1.put(bundle2);//bundle中可以装Bundle对象。
i.putExtras(bundle1);//把数据包附加在Intent对象上。
i.purExtra(键-bundle1);//把Bundle对象作为键值对附加在Intent对象上。
接收时:
Bundle b = i.getExtras();//从Intent对象中获取Bundle对象(数据包)。
b.getObject(键);//获得数据包中,该键的值。
b.getObject(键,默认值);//当值不存在时,则设置为默认值。
Bundle b2 = i.getExtraBundle();//获得键值对中的Bundle对象。可以传递复杂数据。
使用Serializable(流.note )和Pacelable接口序列化对象来传递对象:
class A implemernts Serializable{};//这种方法传输A类对象时,效率较低,但无需重写其方法。
传递/获得对象的方法:
i.putSerializableExtra(键-值));
i.getSerializableExtra(键);
bundle1.putSerializable(键-值);
bundle1.getSerizlizable(键);
class A implements Parcelable{};//这种方法效率较高,但是要重写2个方法:
public int describeContents(){
return 0; //这个方法这样些就行了
}
public void writeToParcel(Parcel dest,int flage){
dest.writeObject1(Object的Object1类型参数);
dest.writeObject2(Object的Object2类型参数); //写出该类的对象的参数(通过该类的getExmple()方法获得数据)
}
还需要添加一个对象:
public static final Parcelable.Creator<Object> CREATOR = new Creator<Object>(){
public Object createFromParcel(Parcel source){
return new Object(source.readObject1,source.readObject2);//这里是用实现Parcalable接口的对象的参数来新建一个对象,把它作为返回值。相当于从parcel中取出对象。
}
public Object[] newArray(int size){
return new Object[size];
}
注意:上面的红色部分一定要大写,否则会报错!writeToParcel()和createFromParcel()的先后顺序需要对应。implements的对象不适用于存盘操作。
传递/获得对象的方法:
i.putParcelableExtra(键-值);
i.getParcelableExtra(键);
bundle1.putParcelable(键-值);
bundle1.getParcelable(键);
由A启动B,再由B返回一个数据给A的操作:
B这边:
Intent i = getIntent();
i.putExtra(键-值);
setResult(1,i); //由这个方法返回一个数据给A
A这边:
Intent i = new Intent();
startActivityForResult(i,0); //使用这种方法才能接收B返回的数据。
重写方法:
protected void onActivityResult(int requstCode,int resultCode,Intent data){
super.onActivityResult(requestCode,resultCode,data);
}
参数说明:
第一个参数是A中的请求码,对应0;
第二个参数是B中的返回码,对应1;
第三个参数为B中的Intent对象。
Intent相关的一些方法:
getIntent():获得启动这个Activity的意图。
0 0
- Intent简介
- Intent简介
- Intent简介
- Intent简介
- Intent 和 Intent Filter简介
- Intent技术简介
- 4Intent对象简介
- Intent()用法简介
- Android Intent 简介
- 【Android】Intent简介
- Intent技术简介
- Android之Intent 简介
- Intent的用法简介
- Android intent-fileter简介
- Intent简介及属性
- 有关Intent的一些简介
- Intent对象(二)简介
- Android——Intent简介
- 运行状态监控的方式
- java BIO实例——ServerSocket、Socket编程
- C++中#if #ifdef 的作用
- Linux命令之sort
- SecureCRT连接AWS EC2云主机密码登录
- Intent简介
- 2016,新的开始~
- Java中的Date类
- HDOJ-----1232并查集
- LogUtil
- 【C++版】Face Alignment at 3000 FPS by Regressing Local Binary Features源码下载
- Webkit内核探究【2】——Webkit CSS实现
- 第三方库大全
- 开发一个App要100万? 太扯淡