android intent和broadcast receiver广播发送和接收基础

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){

         响应的方法体

}

}

转载请注明出处

相关推荐