您的位置:首页 > 移动开发 > Android开发

动态注册广播

2016-04-16 18:13 344 查看
广播分为有序广播(Ordered brodcasts)和无序广播(Normal broadcasts)

有序广播是一种同步执行的广播,在同一时间段,只有一个广播发出,只有等这个广播执行完,才会发向下一个广播,这种广播可以截断

无序广播时默认广播,是一种异步执行的操作,广播发出后,无法截断。

广播接收器有两种注册方式,一种是在AndroidMainfest里面注册和代码里面注册,前者被称为静态注册,后者成为动态注册

那么如何创建一个广播接收器呢?其实只需要创建一个类,然后继承Broadcast Receive然后重写onReceive()方法就可以啦,当有广播到来时,onReceive()方法会自动调用

动态注册广播:

一:创建一个IntentFilter对象。

二:使用IntentFilter对象的setAction方法添加一个监听对象(intentFilter.setAction("android.net.conn.CONNECTIVITY_CHANGE"));

三:创建一个类,继承BroadcastReceiver类,实现里面的Onreceive方法();在Onreceive方法里面通过getSystemService(Context.CONNECTIVITY_SERVICE);获取到ConnectivityManager对象;调用ConnectivityManager里面的getActiveNetworkInfo()方法获取到NetWorkInfo对象,判断netWorkInfo对象是否为非空&&info.isAvailable()

那么为有网络,反之为没有网络。

四:使用registerReceiver(Broadcastreceiver,intentFilter)实现这个广播接收
五:在onDestroy里面使用unregisterReceiver结束当前广播(unregisterReceiver)
六:在清单文件中加入android.permission.ACCESS_NETWORK_STATE权限,用于查询是否有网络
代码:
public class MainActivity extends Activity {
private IntentFilter intentFilter;
Broadcasts broadcast;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
//      监听网络变化
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
broadcast = new Broadcasts();
//      注册广播
registerReceiver(broadcast, intentFilter);
}
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(broadcast);
}
class Broadcasts extends BroadcastReceiver
{
public void onReceive(Context arg0, Intent arg1) {
ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
if(info !=null && info.isAvailable())
{
Toast.makeText(MainActivity.this, "有网络", 0).show();
}
else
{
Toast.makeText(MainActivity.this, "木有网络", 0).show();
}
}
}
}


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 四大组件