android广播简单使用
android广播使用得先注册,广播2种注册方式,动态注册和静态注册,他们的区别可以去网上搜索,
我简单总结下如何使用。
1.动态广播:
1).首先Activity初始化
public static final String BROADCAST_ACTION = “com.example.bhxx.testandroid”;//这个值随便填,注意与下面的保持一致就行
private BroadcastReceiver mBroadcastReceiver;
/**
* 注册动态广播
*/
private void registerBroadcase() {
mBroadcastReceiver = new MyBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(BROADCAST_ACTION);//只有持有相同的action的接受者才能接收此广播
registerReceiver(mBroadcastReceiver, intentFilter);//注册
}
2).使用广播
//发送广播内容
Intent intent = new Intent(); //Itent就是我们要发送的内容
intent.putExtra(“data”,”上海欢迎您”);
intent.setAction(BROADCAST_ACTION); //设置你这个广播的action,只有和这个action一样的接受者才能接受者才能接收广播
sendBroadcast(intent); //发送广播
3).广播接收
private class MyBroadcastReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(BROADCAST_ACTION)){
String value = intent.getStringExtra("data");
Log.i("TAG","value="+value);
}
}
}
4).注销广播
unregisterReceiver(mBroadcastReceiver);
搞定。
2.静态注册
1).在配置文件中添加
<receiver android:name="com.example.bhxx.testandroid.receiver.MyReceiver">
<intent-filter>
<action android:name="com.example.bhxx.testandroid.receiver.MyReceiver.startbroadcase">
</action>
</intent-filter>
</receiver>
//name值可以随便填 与后面对应就行
2).发送广播
//发送广播内容
Intent intent2 = new Intent(); intent2.setAction("com.example.bhxx.testandroid.receiver.
MyReceiver.startbroadcase");
intent2.putExtra("data", "北京欢迎您");
sendBroadcast(intent2);
3).新建广播接收类 (MyReceiver )
public class MyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("com.example.bhxx.testandroid.receiver.MyReceiver.startbroadcase")){
String values = intent.getStringExtra("data");
Log.i("TAG","values =" +values);
}
}
}
Ok搞定
注意,广播接收数据不能直接设置到主线程中。广播也能在内部类中使用,配置文件中这样使用:
<!-- 注册一个广播接受者 开启服务广播 -->
<receiver android:name="com.cn.daming.deskclock.TimersActivity$MyReceiver">
<intent-filter>
<action android:name="com.cn.daming.deskclock.startReceiver" ></action>
</intent-filter>
</receiver>
BasicActivity(基础Activity类)中可以用动态注册广播监听全局APP是否联网,
使用如下:
1).注册
protected NesConnectionChangeReceiver changeReceiver;
private void registerReceiver() {
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
changeReceiver = new NesConnectionChangeReceiver();
this.registerReceiver(changeReceiver, filter);
}
2).接收
protected class NesConnectionChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
// 改变背景或者 处理网络的全局变量'
showToast("网络不可用");
}
}
}
3).注销
private void unRegisterReceiver() {
this.unregisterReceiver(changeReceiver);
}