android获取及监听手机网络状态



在Android开发中,获取和监听手机网络状态通常涉及到使用ConnectivityManager类。这个类提供了关于设备网络连接状态的信息,包括Wi-Fi、移动数据等。以下是一个基本的指南,说明如何实现这一功能:

  1. 获取ConnectivityManager实例
    首先,你需要从系统服务中获取ConnectivityManager的实例。这可以通过调用Context.getSystemService(Context.CONNECTIVITY_SERVICE)实现。
  2. 检查网络状态
    使用ConnectivityManagergetNetworkCapabilities方法,你可以获取当前网络的能力。这可以帮助你确定网络是否连接,以及连接的类型(如Wi-Fi、移动数据等)。
  3. 注册网络状态监听器
    为了监听网络状态的变化,你需要注册一个ConnectivityManager.NetworkCallback。这个回调会在网络状态发生变化时被触发。
  4. 实现网络状态监听逻辑
    NetworkCallback的实现中,你可以根据需要重写不同的方法,比如onAvailable(当网络变得可用时调用)或onLost(当网络断开时调用)。
  5. 注销监听器
    当你不再需要监听网络状态时,确保注销NetworkCallback,以避免内存泄漏。

以下是一个简单的代码示例:

import android.content.Context;  
import android.net.ConnectivityManager;  
import android.net.Network;  
import android.net.NetworkCapabilities;  
import android.net.NetworkRequest;  
import android.os.Build;  
import androidx.annotation.RequiresApi;  
  
public class NetworkStateMonitor {  
    private Context context;  
    private ConnectivityManager connectivityManager;  
    private ConnectivityManager.NetworkCallback networkCallback;  
  
    public NetworkStateMonitor(Context context) {  
        this.context = context;  
        connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);  
    }  
  
    public void startMonitoring() {  
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {  
            networkCallback = new ConnectivityManager.NetworkCallback() {  
                @Override  
                public void onAvailable(Network network) {  
                    // 网络可用时的处理逻辑  
                }  
  
                @Override  
                public void onLost(Network network) {  
                    // 网络断开时的处理逻辑  
                }  
            };  
            connectivityManager.registerDefaultNetworkCallback(networkCallback);  
        } else {  
            // 对于API级别低于Nougat的设备,使用旧版API进行网络状态监听  
        }  
    }  
  
    public void stopMonitoring() {  
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {  
            connectivityManager.unregisterNetworkCallback(networkCallback);  
        } else {  
            // 取消旧版API的监听  
        }  
    }  
}

在这个示例中,NetworkStateMonitor类负责注册和注销网络状态监听器。当网络状态发生变化时,相应的回调方法会被触发。请注意,这个示例使用了Android Nougat(API 级别 24)引入的NetworkCallback类。如果你的应用需要支持更低版本的Android,你需要使用旧版的API来监听网络状态。