Android广播的使用
来源:互联网 发布:java listview 编辑:程序博客网 时间:2024/05/21 22:42
广播的使用很简单,概括来讲只需要一个发广播和一个接收广播. 而广播接收者是Android四大组件之一,实际上这两种操作步骤最多的就是广播接收者
先说一下怎么发广播吧, 可以发有序广播和无序广播,
无序广播我觉得应该是用的很多的,需要一个Intent
Intent intent=new Intent("DFragment");这种写法和下面一种是一样的,都是有一个过滤的值
Intent intent=new Intent();intent.setAction("DFragment");也就是说在广播接收者中使用这个过滤值,那广播就可以被收到,当然如果要传值,那就把Intent像往常一样,带个值传过去就好
intent.putExtra("issign",true);这种广播是一旦发出所有页面都会收到,时间不固定,发广播只要一句话(这个用context的是在Fragment发广播)
context.sendBroadcast(intent);
有序广播发送方面与无序广播类似,一个带过滤值的Intent和希望携带的数据, 只有发送代码不同
context.sendOrderedBroadcast(intent,null);第二个参数我们一般来讲填null就可以啦,那个是自定义权限,需要的自己查
单看发送广播,我们是看不出来两种广播的区别的,所以我们接下来说一下广播接收者来讲两种广播的区别
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
广播接收者是四大组件之一,所以它是需要注册的,注册方式有两种,两种注册方法都是创建一个类来继承广播接收者,并且在类中进行希望收到广播后做的事情,只不过注册方式,类的位置,作用有区别
第一种为静态注册. 静态注册是正常创建一个类(不是内部类) 注册方法就是在AndroidManifest文件中注册 这一种广播接收者一般是为了在应用关闭后来接收系统广播用的, 因为是静态注册,所以在应用安上后,并且应用启动过一次后, 他就可以一直接收广播
public class MyBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { //在这里接收Intent 并且做希望做的事情(比如接到收到短信的广播后将程序启动) }}
注册方式(与activity同级)
<receiver android:name=".tools.MyBroadcastReceiver">这里的intent-filter 是我们静态注册和动态注册都会用到的,这里的priority="100" 是用来接收有序广播的(无序广播不用这个属性),100这个数字代表优先级大小,从-1000~1000 数字越大,优先级越大,优先级大的先接到广播 ,当优先级相同时,接到广播的顺序不固定 先接到有序广播的可以截断广播(无序广播截断会崩溃),或者向下一个接到广播的接收者传值 (也是有序广播的特性)<intent-filter android:priority="100"> <action android:name="android.intent.action.DREAMING_STOPPED"/></intent-filter></receiver>
name是我们想要接收的广播,这里我选的是系统广播, 这个name就是过滤值, 只有发送方和接收方的过滤值对上了才可以接到
静态广播这样就可以使用了
动态广播是我们经常使用的,它可以更新UI界面,界面间来回传值,非常方便 ,动态广播不需要在AndroidManifast中注册,而是选在了在代码中注册, 哪里需要注册在哪
首先也要创建个类,不过这次是内部类(毕竟想要操作UI)
private class CReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { imageView.setVisibility(View.VISIBLE); } }}在这里我想要让ImageView显示 那么创建完类,我们来注册广播
首先我们创建一个这个内部类的对象(这些都是在onCreate之类的生命周期里写的)
CReceiver actionReceiver = new CReceiver();
然后我们需要一个和静态广播类似的过滤器 那就是IntentFilter 这个是Intent过滤器对象,可以设置过滤的值(下面也是两种设置过滤值的方法)和优先级(第三个)
IntentFilter intentFilter=new IntentFilter("DFragment");
intentFilter.addAction("DFragment");
intentFilter.setPriority(100);当我们做完这些就可以注册了
context.registerReceiver(actionReceiver,intentFilter);记得当不使用了 一定要解除绑定(占用资源,而且动态注册的广播在关闭当前Activity之后就不会再监听了)
context.unregisterReceiver(actionReceiver);
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.广播发送的过滤器是Intent 广播接收的过滤器是IntentFilter 当两者过滤值相同时 才能接到
2.静态广播是外部类 ,动态广播是内部类 ; 静态广播在AndroidManifest中注册, 动态广播在代码中注册 ;
静态广播可以在应用关闭的情况下监听系统广播,动态广播在所注册页面销毁后就不在监听 ;
静态广播不需要取消注册, 动态广播在页面销毁前一定要取消注册(不取消不会崩溃,但是会很占资源,属于不好的习惯) ;
静态广播一般都是用来接收系统广播,动态广播一般用来操作页面
动态广播的优先级高于静态广播(这一点有时候在设置了优先级时会使有序广播的顺序不对)
3. 有序广播的发送代码中有 order ;
有序广播的接收者需要比无序广播多加一个Priotity属性,用来确定广播接收的顺序
无序广播比有序广播快,但是有许多事情是只有在有序广播做得到的 (比如截断广播,向下一个接收广播的接收者传值)
(PS 有时候自己测试收不到手机的系统广播,很可能是手机里有软件优先级比你高,并且它缺德的把广播给截断了)
- android 广播的使用
- android 广播的使用
- android 广播的使用
- android 广播的使用
- android 广播的使用
- android 广播的使用
- Android的广播使用
- android 广播的使用
- Android广播的使用
- android 广播的使用
- Android广播的使用
- Android消息广播的使用
- android广播的使用实例
- Android中广播的使用
- android 广播的使用(自用)
- android 广播的简单使用
- Android 广播的使用方式
- android 广播的简单使用
- jquery-weui地区选择器改为时间季度选择器
- Storm1.0集群部署(HA)
- VS部分快捷方式
- Android笔记(一)
- jQuery分页插件jquery.pagination.js使用
- Android广播的使用
- 自定义View中textSize显示异常
- 以域管理账户连接到TFS或git时,设置IE允许Cookies
- css3样式书写ICON图标
- ios复制字符串到剪贴板
- 无线电,电磁波
- 噩梦射手(SurvivalShooter)教程(三)
- Android IPC之序列化
- JVM底层如何实现synchronized