使用BroadcastReceiver监听网络状态

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;


public class ConnectionChangeReceiver 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()) {
        	
        	Log.i("------ConnectionChangeReceiver--------", "网络正常");
        	
        }else {
        	
        	Log.i("------ConnectionChangeReceiver--------", "没有网络");
        }
    }
}

上面就是核心代码块

private ConnectionChangeReceiver myReceiver;
	private  void registerReceiver(){
        IntentFilter filter=new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
        myReceiver=new ConnectionChangeReceiver();
        this.registerReceiver(myReceiver, filter);
    }
	
	private  void unregisterReceiver(){
        this.unregisterReceiver(myReceiver);
    }

上面的广播注册及销毁可以在baseactivity中使用。也可以单独在每个activity中使用。这个相信大家都会就不多说了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android提供了一个ConnectivityManager类来监听网络状态的变化。ConnectivityManager类可以通过注册BroadcastReceiver来实现网络状态监听,也可以通过调用该类的方法来获取当前网络状态。 以下是通过注册BroadcastReceiver监听网络状态的代码示例: 1. 创建一个BroadcastReceiver类 ``` public class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 获取网络状态 ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { // 网络已连接 } else { // 网络未连接 } } } ``` 2. 在AndroidManifest.xml文件中注册BroadcastReceiver ``` <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application ... <receiver android:name=".NetworkChangeReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> </intent-filter> </receiver> ... </application> ``` 在上面的代码中,我们注册了两个IntentFilter,一个是CONNECTIVITY_CHANGE,另一个是WIFI_STATE_CHANGED。这样,当网络状态发生变化时,系统会发送一个广播,我们的BroadcastReceiver就会接收到这个广播,并在onReceive方法中处理。 通过调用ConnectivityManager类的方法来获取当前网络状态的代码示例: ``` ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { // 网络已连接 } else { // 网络未连接 } ``` 在上面的代码中,我们通过调用ConnectivityManager类的getActiveNetworkInfo方法来获取当前网络状态。如果返回的networkInfo对象不为空,并且isConnected方法返回true,那么就表示当前网络已连接。否则,就表示当前网络未连接。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值