android_广播的分类
2016-03-18 02:15
423 查看
android中的广播分为2类:有序广播和无须广播
有序广播
广播接收者收到广播有先后顺序之分,到底谁先睡后,由优先级别来指定, 优先级别高的广播接收者可以修改广播的内容,甚至是终止广播的继续传输。 有点类似: 中央文件层层下发
无序广播
广播接收者收到广播没有顺序之分,大家都是同时收到,也就谈不上修改内容与终止广播 .
有点类似晚上的7点钟节目《新闻联播》
上面的代码就可以发送出去一个无须的广播.既然无须广播已经发送出去了,
那么我们怎么监听呢?
代码演示如何监听自己的发送的广播
其实和监听系统的广播是一样的.
最终接受者
有序广播
广播接收者收到广播有先后顺序之分,到底谁先睡后,由优先级别来指定, 优先级别高的广播接收者可以修改广播的内容,甚至是终止广播的继续传输。 有点类似: 中央文件层层下发
无序广播
广播接收者收到广播没有顺序之分,大家都是同时收到,也就谈不上修改内容与终止广播 .
有点类似晚上的7点钟节目《新闻联播》
代码演示如何发送一个无须的广播
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View v){ //启动界面 startActivity //发送广播 sendBroadcast Intent intent = new Intent(); intent.setAction("com.itheima.cctv.action.NEWS"); intent.putExtra("data", "我是一个无须的广播"); sendBroadcast(intent); } }
上面的代码就可以发送出去一个无须的广播.既然无须广播已经发送出去了,
那么我们怎么监听呢?
代码演示如何监听自己的发送的广播
其实和监听系统的广播是一样的.
public class CctvReceiver extends BroadcastReceiver { private static final String TAG = "CctvReceiver"; @Override public void onReceive(Context context, Intent intent) { String data = intent.getStringExtra("data"); Log.d(TAG, "data==="+data); } }
<receiver android:name="com.itheima.cctv.CctvReceiver"> <intent-filter > <!--这里监听的广播就是上面发送广播设置的intent.setAction("com.itheima.cctv.action.NEWS");--> <action android:name="com.itheima.cctv.action.NEWS"/> </intent-filter> </receiver>
代码演示如何发送一个有序广播
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void click(View v){ Intent intent = new Intent(); intent.setAction("com.itheima.gov.action.POTATO"); //发送有序广播 sendOrderedBroadcast( intent, //意图对象 null, //指定接收的权限, null ,无需权限也能收到广播 new MyReceiver(), // 最终结果接收者 1. 不用注册也可以, 2. 最终广播将会到达这里,即使中途有人终止了,也能收到。 null, //handler 1, //初始代码 code "主席讲话:每人奖励10斤土豆", //初始数据 null); //额外的数据 } }
public class ShengReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d("vivi", "我是省级部门,我收到的指令是:"+getResultData()); //getResultData()是用来获取有序广播里面的数值.这里的信息是: //主席讲话:每人奖励10斤土豆 setResultData("主席讲话:每人奖励7斤土豆");//有序广播的数值,可以被修改,后面的程序在接受到这个广播,就会变成,现在我们改变的值了 //有序广播传输是可以终止的.但是最终的接受者就算在终止之后,也是可以接受到数据的 //abortBroadcast(); } }
public class ShiReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d("vivi", "我是市级部门,我收到的指令是:"+getResultData()); //因为上面修改了数据,所以这里获取到的数据是: 4000 主席讲话:每人奖励7斤土豆 } }
<!--有序广播的优先级别使用 android:priority=""来指定,最高是1000,最低是-1000--> <receiver android:name="com.itheima.region.ShengReceiver"> <intent-filter android:priority="1000"> <action android:name="com.itheima.gov.action.POTATO"/> </intent-filter> </receiver> <receiver android:name="com.itheima.region.ShiReceiver"> <intent-filter android:priority="500"> <action android:name="com.itheima.gov.action.POTATO"/> </intent-filter> </receiver>
最终接受者
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d("vivi", "我是恩恩主席的内线,我收到的指令是:"+getResultData()); } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories