android 广播详解与实例(Broad Receiver)
来源:互联网 发布:猪八戒的前世今生 知乎 编辑:程序博客网 时间:2024/05/29 15:47
- 系统全局广播
- 系统全局广播
以下3个例子属于系统全局广播,是一种可以跨进程的通信方式,从自己的应用程序发出的广播,其他的应用程序也是可以收到的。
一、接收系统广播
public class UserActivity extends Activity{ private BroadcastReceiver broadcastReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);//去除标题setContentView(R.layout.activity_user);networkChangeReceiver();//接收网络状态改变的系统广播}}public void networkChangeReceiver(){broadcastReceiver = new BroadcastReceiver(){@Overridepublic void onReceive(Context context, Intent intent){//runOnUiThread(new Runnable()//{//@Override//public void run()//{//ConnectivityManager是一个系统服务类,专门用于管理网络连接ConnectivityManager connectivityManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);//获取ConnectivityManager实例//获取NetworkInfo实例NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();if(networkInfo != null && networkInfo.isAvailable()){Toast.makeText(MyApplication.getContext(), "network is available", Toast.LENGTH_LONG).show();}else{Toast.makeText(MyApplication.getContext(), "network is unavailable", Toast.LENGTH_LONG).show();}//}//});}};IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(Const.networkChange_action);registerReceiver(broadcastReceiver, intentFilter);}
二、发送自定义标准广播(标准广播异步执行,所有广播器接收到广播信息,但无法被截断)
1. 创建MyBroadcastReceiver类
public class MyBroadcastReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {// TODO 自动生成的方法存根Toast.makeText(MyApplication.getContext(), "received in mybroadcastReceiver", Toast.LENGTH_LONG).show();}}
2. 在AndroidManifestexml对广播接收器进行修改
<application...>
...
<receiver
android:name="com.example.BroadcastReceiver.MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.example.BroadcastReceiver.MY_BROADCAST" />
</intent-filter>
</receiver>
</application>
android:name="com.example.BroadcastReceiver.MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.example.BroadcastReceiver.MY_BROADCAST" />
</intent-filter>
</receiver>
</application>
3. 在activity里发送广播(可利用Intent传送数据)
Intent intent = new Intent("com.example.BroadcastReceiver.MY_BROADCAST");
sendBroadcast(intent);
sendBroadcast(intent);
三、发送自定义有序广播(标准广播同步执行,广播器接收广播信息有先后顺序,优先级搞定广播接收器可截断信息)
1. 在AndroidManifestexml对广播接收器进行修改
<manifest ...>
<application...>
...
<receiver
android:name="com.example.BroadcastReceiver.MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
android:name="com.example.BroadcastReceiver.MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
//把MyBroadcastReceiver的优先级设成100,优先级高的广播接收器先收到广播
<intent-filter android:priority="100">
<action android:name="com.example.BroadcastReceiver.MY_BROADCAST" />
</intent-filter>
</receiver>
</application>
<intent-filter android:priority="100">
<action android:name="com.example.BroadcastReceiver.MY_BROADCAST" />
</intent-filter>
</receiver>
</application>
</manifest>
2. 在activity里发送广播
Intent intent = new Intent("com.example.BroadcastReceiver.MY_BROADCAST");
//用 sendOrderedBroadcast就发送有序广播
sendOrderedBroadcast(intent,null); //第一个参数是Intent,第二个参数是一个与权限相关的字符串
sendOrderedBroadcast(intent,null); //第一个参数是Intent,第二个参数是一个与权限相关的字符串
3. 修改MyBroadcastReceiver类
public class MyBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO 自动生成的方法存根
Toast.makeText(MyApplication.getContext(), "received in mybroadcastReceiver", Toast.LENGTH_LONG).show();
@Override
public void onReceive(Context context, Intent intent) {
// TODO 自动生成的方法存根
Toast.makeText(MyApplication.getContext(), "received in mybroadcastReceiver", Toast.LENGTH_LONG).show();
abortBroadcast(); //用abortBroadcast();将广播截断
}
}
}
}
- 本地广播
只能在应用程序内部传递的广播,安全性高(LocalBroadcastManager)。
例子:
本地广播注册与接收的函数:
/** * 本地广播 */public void LocalBroadcastReceiver(){localReceiver = new BroadcastReceiver(){@Overridepublic void onReceive(Context context, Intent intent){runOnUiThread(new Runnable(){@Overridepublic void run(){Toast.makeText(MyApplication.getContext(), "received local broadcast", Toast.LENGTH_LONG).show();}});}};IntentFilter intentFilter = new IntentFilter();intentFilter.addAction("com.example.BroadcastReceiver.MY_BROADCAST");localBroadcastManager.registerReceiver(localReceiver, intentFilter);}
函数的应用:
empty
取消注册:
/** * 销毁activity */@Overrideprotected void onDestroy(){super.onDestroy();//if(broadcastReceiver != null){//unregisterReceiver(broadcastReceiver);//取消注册广播//}localBroadcastManager.unregisterReceiver(localReceiver);//取消注册本地广播}
0 0
- android 广播详解与实例(Broad Receiver)
- Android中的BroadCast Receiver(广播)详解
- Android 广播(Broadcast Receiver)使用详解
- Android 广播接收者-- receiver(待写)
- Android 广播(Receiver)的动态注册
- Android广播receiver
- Android广播机制-Broadcast Receiver
- 玩转Android---组件篇---Broadcast Receiver(广播接收器)
- 游走Android系列之广播接收(Broadcast Receiver)
- 玩转Android---组件篇---Broadcast Receiver(广播接收器)
- Broadcast Receiver(广播接收器)
- Broadcast Receiver(广播接收器)
- Broadcast Receiver(广播接收器)
- Android四大基本组件之一 ,广播(broadcast receiver)---无序广播
- Android四大基本组件之一 ,广播(broadcast receiver)---有序广播
- Android中Intent详解(二)之使用Intent广播事件及Broadcast Receiver简介
- Android中Intent详解(二)之使用Intent广播事件及Broadcast Receiver简介
- 关于Android四大组件之一broadcast receiver的详解(广播接收者)
- 粉丝福音,漫威《银河护卫队2》将入坑VR
- Student Attendance Record I问题及解法
- 微信开发之事件推送与被动回复
- Linux虚拟地址空间布局
- git fatal: refusing to merge unrelated histories
- android 广播详解与实例(Broad Receiver)
- npm 常用命令详解
- 标准IO流cin与cout
- 38. Count and Say
- 常见开源加密算法库
- docker命令
- Android反编译
- 股票数据的获取分析
- NOIP2007提高组——矩阵取数游戏(game)