动态注册广播

广播分为有序广播(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();
   }
  }
 }
}


 



 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值