基础三:BroadcastReceiver
来源:互联网 发布:linux netstat 状态 编辑:程序博客网 时间:2024/05/29 17:39
broadcast receiver–广播接收器,接受全局的广播。
根据广播的种类分为系统广播和自定义广播。
- 系统广播:电池消耗情况,开关机。一般系统广播为有序广播
- 自定义广播:自己定义一个广播。
根据广播的传播方式分为:普通广播和有序广播(orderedBroadcast) - 普通广播:异步执行,当一个broadcast发出后,所有与之匹配的broadcast都会同时接收到广播。
- 有序广播:同步执行,会根据之前设置的优先级有序的执行,优先级高的接收器可以截断广播,从而停止广播的传送,传说中的短信电话拦截就是用的这个原理。
根据广播的注册方式分为静态注册和动态注册。 - 静态注册:在AndroidManifest中进行注册,广播会一直存在除非退出app。一般多用于系统广播注册。
动态注册:在类中通过context.registerBroadcast()进行注册,可以通过onResume()注册,onPause()注销。
广播的发送方式:sendBroadcast(intent);
- sendOrderedBroadcast(intent);–发送有序广播
onReceiver方法–当接收器接收到传递的广播时会调用onreiver方法,但是BroadcastReceiver的周期在onReceiver结束后结束,而且onReceiver是运行在主线程中的,如果需要执行耗时程序,需要开启service,创建新线程。
以下就通过代码来运用广播的注册与发送。
- 静态注册广播
<receiver android:name=".broadcast.MyReceiver" > <intent-filter> <action android:name="android.action.test" /> </intent-filter> <intent-filter> <action android:name="android.action.dynamic.test"/> </intent-filter> </receiver>
@OnClick(R.id.send_broadcast) void sendBroad() { Intent intent = new Intent().setAction("android.action.test"); intent.putExtra("broad","register broadcast"); sendBroadcast(intent); }
- 动态注册广播
@Override protected void onResume() { Log.i(TAG, "onResume"); super.onResume(); IntentFilter intentFilter=new IntentFilter(); intentFilter.addAction("android.action.dynamic.test"); registerReceiver(new MyReceiver(), intentFilter); } @Override protected void onPause() { Log.i(TAG, "onPause"); super.onPause(); unregisterReceiver(new MyReceiver()); }
@OnClick(R.id.send_dynemic_broadcast) void sendDynemicBroad(){ Intent intent =new Intent().setAction("android.action.dynamic.test"); intent.putExtra("broad","dynamic reggister broadcast"); sendBroadcast(intent); }
继承BroadcaReceiver的类,调用onReceiver方法。
public class MyReceiver extends BroadcastReceiver { public MyReceiver() { } // 不能执行超过5秒的任务,可以用service,关于context,若是静态注册,则context为系统context,若动态注册,则context为注册的那个类 @Override public void onReceive(Context context, Intent intent) { // TODO: This method is called when the BroadcastReceiver is receiving // an Intent broadcast. if (**intent.getAction().equals("android.action.dynamic.test")**){ DebugLog.i("broad"+intent.getStringExtra("broad")); Toast.makeText(context,intent.getStringExtra("broad"),Toast.LENGTH_SHORT).show(); }else if (intent.getAction().equals("android.action.test")){ DebugLog.i("dynamicBroad"+intent.getStringExtra("broad")); Toast.makeText(context,intent.getStringExtra("broad"),Toast.LENGTH_SHORT).show(); } Log.i("MyReceive", "onReceive" + intent.getAction()); }}
上图图片就是静态注册和动态注册后执行的方法
0 0
- 基础三:BroadcastReceiver
- Android基础总结三:BroadcastReceiver总结一
- BroadcastReceiver基础应用
- 基础篇1.8 BroadcastReceiver
- BroadcastReceiver基础总结
- 基础:BroadcastReceiver应用详解
- Android基础BroadCastReceiver简介
- Android- BroadCastReceiver 基础学习
- [Android基础]BroadcastReceiver
- Android基础BroadcastReceiver详解
- Android基础--广播BroadcastReceiver
- Android基础----BroadcastReceiver
- android studio BroadcastReceiver基础
- 基础-4 ANDROID BroadcastReceiver
- Android基础回顾--BroadcastReceiver
- 基础学习day07--broadcastReceiver
- Android (BroadcastReceiver基础)
- Android 广播接收器BroadcastReceiver(三)
- [编程题]找出缺失的整数
- 内部类和外部类知识点
- hdu 5452 Minimum Cut
- 有了MAC层地址,为什么还要有IP地址?
- Objective-C---1---类的有关基本概念
- 基础三:BroadcastReceiver
- MonaServer集群配置
- 嵌入式系统——低功耗设计
- vi编辑器常用命令
- vs2013+WDK8.1+WinDbg调试驱动开发环境配置(多帖子整理,水原创)
- 疯狂猜歌实现(13)—— 播放歌曲与音效
- VS编译工程时遇见 error LNK1168错误
- Java垃圾回收机制
- View 随着手指的移动而放大和旋转