Geeny 2015-01-13
Intent介绍
⑴Android中提供了Intent机制来协助应用间的交互与通信,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。
(2)与简单函数/方法调用,或者通过库调用接口的方式不太一样。在Intent的使用中你看不到直接的函数调用,相对函数调用来说,Intent是更为抽象的概念,利用Intent所实现的软件复用的粒度是Activity/Service,比函数复用更高一些,另外耦合也更为松散。
(3)Intent 是描述应用想要做什么,Intent 数据结构两个最重要的部分是:
动作:典型的动作类型有:MAIN(活动的门户)、VIEW、PICK、EDIT等。
动作对应的数据:以URI 的形式进行表示例如:要查看某个人的联系方式,你需要创建一个动作类型为VIEW 的Intent,以及一个表示这个人的URI。
(4)Android使用了Intent这个特殊类,实现在屏幕与屏幕之间移动。Intent 类用于描述一个应用将会做什么事。
1 使用类名显式的启动一个特定的Service或Activity.
例如:
Intent intent = new Intent(MyActivity.this,OtherActivity.class);
startActivity(intent);
代返回结果的
startActivityForResult(intent,SHOW_SUBACTIVITY)
发送一个请求码,用来标示返回了结果的子Activity
2 隐式的Intent
例如:
Intent intent = new Intent(Intent.ACTION_DTAL,Uri.parse("tel:555-2368"));
startActivity(intent);
两个参数:动作和数据
andorid会解析intent启动一个Activity提供对这个电话号码打电话的动作。
和显式一样可以传入请求码
IntentFilter过滤器
⑴intentfilter 则用于描述一个activity(或者IntentReceiver)能够操作哪些intent。
一个activity 如果要显示一个人的联系方式时,需要声明一个IntentFilter,这个IntentFilter 要知道怎么去处理VIEW 动作和表示一个人的URI。
⑵IntentFilter 需要在AndroidManifest.xml 中定义。
通过解析各种intent,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时,activity 将会调用startActivity(IntentmyIntent)方法。然后,系统会在所有安装的应用程序中定义的IntentFilter 中查找,找到最匹配Intent对应的activity。新的activity 接收到通知后,开始运行。当startActivity 方法被调用将触发解析Intent 的动作。
⑶这个机制提供了两个关键好处:
Activities 能够重复利用从其它组件中以Intent 的形式产生的一个请求。Activities 可以在任何时候被一个具有相同IntentFilter 的新的Activity 取代。
使用intent广播事件
使用sendBroadcast 方法在组件直接匿名的广播消息
public static final String NEW_LIFEFORM_DETECTED = "com.paad.action.NEW_LIFEFORM";
Intent intent = new Intent(lifeformdetectedReceiver.NEW_LIFEFORM);
sendBroadcase(intent);
使用Broadcast Receiver监听广播
在代码中或者manifest中注册监听和广播的intent相符合的intent-filter
在application节点中添加
<receiver android:name = ".lifeformdetectedreceiver" ----要注册的broadcast的类名
<intent-filter>
<action android:name = "com.paad.alien.action.NEW.LIFEFORM" />
<intent-filter>
</receiver>
新建扩展broadcast的类用来响应
public class MyBroadcasReceiver extends BroadcastReceiver {
public void onReceive (Contet,Intent intent){
响应的方法体
}
}
转载请注明出处