BroadcastReceiver广播接收器简介及基本用法
来源:互联网 发布:php接口开发实例代码 编辑:程序博客网 时间:2024/05/16 07:06
**本质上就是一个全局的监听器,用于监听系统全局的广播消息**。由于BroadcastReceiver是一种全局的监听器,因此它可以方便地实现系统中不同组件之间的通信。BroadcastReceiver和事件处理机制相似,事件处理机制是程序级别的,广播接收器系统级别的监听器,拥有自己的进程,只要系统中存在着与之匹配的Intent被广播出来, BroadcastReceiver总会被激发。BroadcastReceieve生命只有十秒左右,如果在onCreate()方法里做超过10秒的操作,就会报错,若需要耗时操作可以通过Itent启动一个Service。有静态注册和动态注册两种方式,静态注册是在AndroidManifest.xml文件中配置,是常住型如下:
<receiver android:name="zhidisoft.broadcastreceiver.BroadcastReceiverTset"> //继承BroadcastReceiver,重写onReceiver()方法 <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"></action>//使用过滤器,接收指定地址广播 </intent-filter></receiver>
动态注册,特点是非常驻型,在代码中能够指定广播地址并注册,相当于给广播增加选台按钮。
public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private ScreenBroadcastReceiver screenBroadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intentFilter=new IntentFilter();//为BroadcastReceiver指定action,使之用于接收同action的广播 intentFilter.addAction(Intent.ACTION_SCREEN_ON);//指定屏幕打开时 intentFilter.addAction(Intent.ACTION_SCREEN_OFF);//指定屏幕关闭时 screenBroadcastReceiver=new ScreenBroadcastReceiver(); registerReceiver(screenBroadcastReceiver,intentFilter);//注册 } class ScreenBroadcastReceiver extends BroadcastReceiver{ private String action=null; @Override public void onReceive(Context context, Intent intent) { action=intent.getAction();//获取广播 if (Intent.ACTION_SCREEN_OFF.equals(action)){ Intent intent1=new Intent(context,Myservice.class); intent1.putExtra("data",action); context.startService(intent1);//启动Service并传值 }else if (Intent.ACTION_SCREEN_ON.equals(action)){ Intent intent1=new Intent(context,Myservice.class); intent1.putExtra("data",action); context.startService(intent1); Toast.makeText( MainActivity.this, "动态注册", Toast.LENGTH_SHORT).show(); } } } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(screenBroadcastReceiver);//动态注册的广播一定记得取消注册,防止内存泄漏; }}
最后就是发送广播了,用的是sendBroadcast,将一个指定地址和参数信息的Intent对象以广播的形式发送出去。
Intent intent = new Intent(“com.zhidi.MY_BROADCAST”);
intent.putExtra(“msg”, “嗨,我是智递科技广播,频段com.zhidi.MY_BROADCAST”);
sendBroadcast(intent);
注:发送广播sendBroadcast类似于给建立一个电台。
发送广播无序广播和有序广播,有序广播根据优先级使用sendOrderedBroadcast()方法;
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="zhidisoft.sendbroadcast"> <permission android:name="zhidisoft.sendbroadcast.receiverPermission" android:protectionLevel="normal"></permission>//声明权限 <uses-permission android:name="zhidisoft.sendbroadcast.receiverPermission"></uses-permission>//获取权限 <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".MyBroadcastReceieve" > <intent-filter android:priority="10">//priority定义优先级 <action android:name="zhidisoft.sendbroadcast.BROADcast" ></action>//指定要接收的广播 </intent-filter> </receiver> <receiver android:name=".MySecondBroadcastReceieve"> <intent-filter android:priority="-100"> <action android:name="zhidisoft.sendbroadcast.BROADcast" ></action> </intent-filter> </receiver> <receiver android:name=".MyThirdBroadcastReceieve"> <intent-filter android:priority="199"> <action android:name="zhidisoft.sendbroadcast.BROADcast" ></action> </intent-filter> </receiver> </application></manifest>
注册完成后在MainActivity中发送广播
public class MainActivity extends Activity {
Button button;
String MY_BROAD=”zhidisoft.sendbroadcast.BROADcast”;
String receiverPermission=”zhidisoft.sendbroadcast.receiverPermission”;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button= (Button) findViewById(R.id.aaaaa);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MY_BROAD);
sendOrderedBroadcast(intent,receiverPermission);//使用sendOrderedBroadcast发送有序广播
}
});
}
- BroadcastReceiver广播接收器简介及基本用法
- BroadCastReceiver android 广播接收器
- BroadcastReceiver 广播接收器
- BroadcastReceiver(广播接收器)
- BroadcastReceiver(广播接收器 )
- Android 广播接收器BroadcastReceiver
- android-----BroadcastReceiver广播接收器
- BroadcastReceiver广播接收器
- Android-BroadcastReceiver广播接收器
- BroadcastReceiver广播接收器
- 广播接收器-BroadcastReceiver 电池电量显示
- Android 广播接收器(BroadcastReceiver)
- android BroadcastReceiver(广播接收器)【转载】
- BroadcastReceiver广播接收器知识点总结
- Android-(广播接收器)BroadcastReceiver-2
- Android BroadcastReceiver广播接收器详解
- Android 广播接收器BroadcastReceiver(一)
- Android 广播接收器BroadcastReceiver(二)
- mark一下!千分位,小数点有就显示,没有就没有
- 自定义VIew,原型头像
- 一分钟教你知道乐观锁和悲观锁的区别
- TTTAttributedLabel 如何将多个字符串高亮显示
- 模式识别(Pattern Recognition)学习笔记(二)——贝叶斯决策
- BroadcastReceiver广播接收器简介及基本用法
- 基于MSP430F5529的μc/os嵌入式实时操作系统移植
- linux下修改网口名称
- 面向对象设计的 10 条戒律
- Java开发七牛云存储 ,上传视频与图片文件 , 页面播放器GrindPlayer.swf
- Linux下PHP安装配置MongoDB数据库连接扩展
- 模式识别(Pattern Recognition)学习笔记(三)——最小错误率贝叶斯决策
- Java多线程编程总结
- JPTabBar简单使用