Wifi 断开和连接上 的广播监听

上一次使用的wifi自动断开/连接的基本方法是:先判断wifi是否打开,并且连接上,如果连上,则断开,断开后再连接,如此循环,因为打开wifi连接中间有一个时间差,当时是直接用线程,然后让该线程休眠的办法,来错开这个时间差,结果是可以达到想要的效果,可是,可最后发现这样有问题,因为这样硬性地去控制为休眠多少秒,显然有问题,如果考虑到硬件和环境等等的额外因素,万一休眠过后还是没有做完上一步,所以只能弃用这种办法,选择利用广播去监听wifi的真实状态,例如,能够准确获取到wifi是否已经开打,或者断开,而不是一切别的时候,例如正在断开,和正在连接,就不会出现其实是在正在连接的状态却被判断成了无连接wifi。

// 监听wifi状态广播
private BroadcastReceiver mwifiBroadcastReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
            ConnectivityManager localConnectivityManager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo localNetworkInfo = (localConnectivityManager == null ? null
                    : localConnectivityManager.getActiveNetworkInfo());
            if (localNetworkInfo != null) {
                if (localNetworkInfo.isConnected()) {
                    //已连接
                } else {
                    //断开连接
                }
            } else {
                    //localNetworkInfo is null, NETWORK................DISCONNECT......
            }
        }
    }
};
//注册广播
            IntentFilter myIntentFilter = new IntentFilter();
            myIntentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
            registerReceiver(mwifiBroadcastReceiver,myIntentFilter);
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 Kotlin 代码示例,用于检测 WiFi 连接状态的更改: ```kotlin import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.net.ConnectivityManager import android.net.NetworkCapabilities import android.net.NetworkInfo import android.net.NetworkRequest import android.net.wifi.WifiInfo import android.net.wifi.WifiManager import android.os.Build import android.util.Log class WifiStateReceiver : BroadcastReceiver() { private var wifiManager: WifiManager? = null private var connectivityManager: ConnectivityManager? = null private var networkCallback: ConnectivityManager.NetworkCallback? = null override fun onReceive(context: Context, intent: Intent) { wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager if (wifiManager?.isWifiEnabled == true) { Log.d(TAG, "WiFi is enabled.") if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { networkCallback = object : ConnectivityManager.NetworkCallback() { override fun onAvailable(network: android.net.Network) { super.onAvailable(network) Log.d(TAG, "WiFi is connected.") } override fun onLost(network: android.net.Network) { super.onLost(network) Log.d(TAG, "WiFi is disconnected.") } } val builder = NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) connectivityManager?.registerNetworkCallback(builder.build(), networkCallback!!) } else { context.registerReceiver(this, IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION)) } } else { Log.d(TAG, "WiFi is disabled.") } } companion object { private const val TAG = "WifiStateReceiver" } } ``` 在 `onReceive()` 方法中,我们检查 WiFi 是否已启用。如果是,则根据设备的 Android 版本注册网络回调或广播接收器以监听网络状态更改。 如果 Android 版本大于或等于 N,我们将创建一个 `NetworkRequest` 并将其传递给 `registerNetworkCallback()` 方法以注册网络回调。在回调中,我们将检查网络是否可用,并相应地记录连接断开连接的状态。 如果 Android 版本低于 N,则我们将注册一个广播接收器以侦听 `WifiManager.NETWORK_STATE_CHANGED_ACTION` 意图。在接收器中,我们将检查网络信息是否可用,并相应地记录连接断开连接的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值