Android 广播
来源:互联网 发布:深圳市软件协会网站 编辑:程序博客网 时间:2024/05/16 11:08
Android 广播
1.系统全局广播
接收广播
动态接收
基本步骤:
1. 继承BroadcastReceiver,并实现OnReceiver方法(接收广播的逻辑处理)
2. 实例化IntentFilter,添加对应action
3. 注册接收器registerReceiver()
4. 取消注册
public class MainActivity extends Activity { private MyBroadcastReceiver myBroadcastReceiver; private IntentFilter intentFilter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intentFilter = new IntentFilter();intentFilter.addAction("android.intent.action.INPUT_METHOD_CHANGED");//切换输入法时的系统广播 myBroadcastReceiver = new MyBroadcastReceiver(); registerReceiver(myBroadcastReceiver, intentFilter); class MyBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) {Toast.makeText(context,"MyBroadcastReceiver.active.net change", Toast.LENGTH_SHORT).show(); //这里只是弹出了一个toast,可进行其他处理如打开一个activity } } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(myBroadcastReceiver); }}
静态接收
基本步骤:
1. 继承BroadcastReceiver,并实现OnReceiver方法(接收广播的逻辑处理),非内部类
2. 在manifest文件中添加一个标签receiver,并添加子标签intent-filter,action
//MyBroadcastReceiver.classpublic class MyBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, intent.toString() + "MyBroadcastReceiver.static", Toast.LENGTH_LONG).show(); //这里只是弹出了一个toast,可进行其他处理如打开一个activity }}//manifest<receiver android:name=".MyBroadcastReceiver" > <intent-filter> <action android:name="android.intent.action.INPUT_METHOD_CHANGED" /> </intent-filter> </receiver>
发送广播
标准广播
- Intent实例,参数为发送的广播的值(接收器的action值),可在intent中加入数据,在接收器中取出
- 发送广播,sendBroadcast()
Intent intent = new Intent("example.broadcasttest.MYBROADCAST"); intent.putExtra("name", "Tom"); sendBroadcast(intent);
接收次广播的action为
intentFilter.addAction("example.broadcasttest.MYBROADCAST");
有序广播
和标准广播就一个区别,就使用sendOrderBroadcast()发送
2.本地广播
发送广播
- Intent实例,参数为发送的广播的值(接收器的action值),可在intent中加入数据,在接收器中取出
- 获得LocalBroadcastManager实例
- 发送广播,localBroadcastManager.sendBroadcast()
localBroadcastManager = LocalBroadcastManager.getInstance(this);Intent intent = new Intent("example.broadcasttest.MYBROADCAST");intent.putExtra("name", "Tom");localBroadcastManager.sendBroadcast(intent);
接收广播
只有动态接收
基本步骤:
1. 继承BroadcastReceiver,并实现OnReceiver方法(接收广播的逻辑处理)
2. 实例化IntentFilter,添加对应action
3. 获得LocalBroadcastManager实例
4. 注册接收器localBroadcastManager.registerReceiver()
5. 取消注册localBroadcastManager.unregisterReceiver();
public class MainActivity extends Activity { private MyBroadcastReceiver myBroadcastReceiver; private IntentFilter intentFilter; private LocalBroadcastManager localBroadcastManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intentFilter = new IntentFilter();intentFilter.addAction("example.broadcasttest.MYBROADCAST"); myBroadcastReceiver = new MyBroadcastReceiver(); localBroadcastManager = LocalBroadcastManager.getInstance(this); localBroadcastManager.registerReceiver(myBroadcastReceiver , intentFilter); class MyBroadcastReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { String name = intent.getStringExtra("name");//接收extra数据 Toast.makeText(context, "MyBroadcastReceiver.active", Toast.LENGTH_SHORT).show(); } } @Override protected void onDestroy() { super.onDestroy(); localBroadcastManager.unregisterReceiver(localMyBroadcastReceiver);//取消注册 }}
3.本地广播和全局广播
发送全局广播:所有应用都能接收到
发送本地广播:只有本应用内可以接收
本地广播更安全,在没有必要的情况下最好发本地广播
另外,本地广播接收器只接受本地广播,本地广播也只能被本地广播接收器接收,如下面关系
本地广播------>本地广播------------------------------------------- 全局广播------>全局广播
4.标准广播和有序广播
标准广播:所有接收器几乎同时收到广播,无法被截断,效率高
有序广播:按优先级顺序一个一个接收,当一个广播逻辑处理完才会往下传,可被截断。
5.静态接收和动态接收
动态接收:只能在程序启动后接收广播
静态接收:未启动也能接收,所以要实现开机自启自能静态注册
- android 广播
- android广播
- Android广播
- android广播
- android广播
- android广播
- android 广播
- android 广播
- android 广播
- android广播
- android广播
- android广播
- android 广播
- Android 广播
- Android广播
- Android 广播
- Android广播
- android广播
- 9.使用高速缓存提高性能
- UDP协议的两个主要方法sendto和recvfrom详解
- Java Security安全系列文档翻译笔记————数字签名、keystore、证书
- .exe 已触发了一个断点。
- Linux下mongodb安装及数据导入导出教程
- Android 广播
- Android光线传感器-android学习之旅(65)
- C#高效绘图(转)
- Seek the Name, Seek the Fame POJ 2752【KMP next数组的应用】
- smarty小总结
- Study-android sqlite
- (八) Testing(测试)
- LR监控linux之详解rstatd的安装-Zee
- MyEclipse+Nexus+Jenkins+Sonar+Tomcat+SVN持续集成环境实战篇