Android 广播
2015-08-07 17:48
441 查看
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.class public 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.静态接收和动态接收
动态接收:只能在程序启动后接收广播静态接收:未启动也能接收,所以要实现开机自启自能静态注册
相关文章推荐
- 使用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