intent是一个对将要进行的操作的抽象描述,主要有三种表现形式:
通过startActivity启动一个新的Activity
通过sendBroadcast将intent发送给任何对该intent感兴趣的BroadcastReceiver
通过startService或者bindService和后台的service进行交互
intent中对某个操作的抽象描述主要包含:Action、data、type、category、extras、component
Action:Android中自定义了许多标准的Action。
ACTION_MAIN(标记程序的入口activity)
ACTION_VIEW(显示数据,常和data一起使用)
ACTION_DIAL(拨号,常和data一起使用)
ACTION_PICK
ACTION_EDIT
ACTION_DELETE
data:Android中采用URI来表示data。下面是一些action/data对:
VIEW_ACTOIN content://contacts/ 显示所有联系人的列表
VIEW_ACTOIN content://contacts/1 显示标示符为1的联系人的详细信息
EDIT_ACTOIN content://contacts/1 编辑标示符为1的联系人的详细信息
PICK_ACTOIN content://contacts/ 显示所有联系人的列表,并允许用户选择一个联系人,把这个联系人返回给父activity。
type:显式指定intent的数据类型,不知道具体有什么用,不过应用开发时基本也用不到??
category:表示执行动作的附加信息。
LAUNCHER_CATEGORY表示intent的接受者应该在Launcher中作为顶级应用出现
ALTERNATIVE_CATEGORY表示intent是一系列可选动作中的一个。
extras:其它所有附加信息的集合。经常用来保存一些需要传递给其它activity的额外数据信息。
component:指定intent的目标组件的类名称。通常Android会根据intent中的其他属性信息,如Action、data、type、category等进行查找,最终找到一个与之匹配的目标组件。但是如果component这个属性有设置的话,将直接使用它所设置的目标组件,而不再执行上述查找过程。
//应用程序启动的activity
//使用category的intent
广播事件
public static final String NEW_BROADCAST = "com.android.action.NEW_BROADCAST";
Intent intent = new Intent(NEW_BROADCAST);
intent.putExtra( "data" , "test" );
sendBroadcast( intent );
广播接收器
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive( Context context, Intent intent ){
...
}
}
注册和注销广播
//AndroidManifest.xml中注册
//代码中注册和注销
IntentFilter filter = new IntentFilter(NEW_BROADCAST);
MyBroadcastReceiver broadcastReceiver = new MyBroadcastReceiver();
registerReceiver( broadcastReceiver, filter );
unregisterReceiver( broadcastReceiver );