Android掌控WiFi不完全指南( 四 )

监控WIFI变化我们很有可能会有这样的需求:在WIFI断开或者连接的时候 , 将当前的WIFI数据保存下来事实上Android中WIFI发生变化的时候 , 会发送广播 , 我们只需要监听系统中发送的WIFI变化的广播就可以实现相关的功能了
开启权限<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />注册监听广播我们先使用动态注册网络状态的监听广播

PS:注册监听有两种方式 , 无论使用哪种注册方式均需要在AndroidMainest清单文件里面进行注册
  • 静态注册
也就是说在AndroidManifest文件中对BroadcastReceiver进行注册 , 通常还会加上action用来过滤;此注册方式即使退出应用后 , 仍然能够收到相应的广播
  • 动态注册
调用Context中的registerReceiver对广播进行动态注册 , 使用unRegisterReceiver方法对广播进行取消注册的操作;故此注册方式一般都是随着所在的Activity或者应用销毁以后 , 不会再收到该广播
动态注册的代码如下
@Overrideprotected void onStart() {super.onStart();IntentFilter filter = new IntentFilter();filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);registerReceiver(NetworkReceiver.getInstance(),filter);}然后写具体的NetworkReceiver
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.wifi.WifiManager;import android.os.Build;import android.widget.Toast;import static android.net.wifi.WifiManager.WIFI_STATE_DISABLED;import static android.net.wifi.WifiManager.WIFI_STATE_ENABLED;import static android.net.wifi.WifiManager.WIFI_STATE_UNKNOWN;/** * @author panyi * @date 2022/8/23 * 广播接收器 用来监听WIFI的变化 */public class NetworkReceiver extends BroadcastReceiver {private volatile static NetworkReceiver sInstance;public NetworkReceiver(){}public static NetworkReceiver getInstance(){if (sInstance == null) {synchronized (NetworkReceiver.class) {if (sInstance == null) {sInstance = new NetworkReceiver();}}}return sInstance;}// WIFI连接状态改变的监听@Overridepublic void onReceive(Context context, Intent intent) {String action=intent.getAction();if(action==WifiManager.WIFI_STATE_CHANGED_ACTION){switch(intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WIFI_STATE_UNKNOWN)){case WIFI_STATE_ENABLED :// WIFI连接Toast.makeText(context, "WiFi enabled", Toast.LENGTH_SHORT).show();break;case WIFI_STATE_DISABLED:// WIFI断开Toast.makeText(context, "WiFi disabled", Toast.LENGTH_SHORT).show();break;}}}}继承BroadcastReceiver广播监听类之后重写onReceive方法 , 根据监听到的不同内容进行具体需求的修改即可
最后 , 随着Android版本的不断迭代 , 上述的方法也许在今后的某个时候就不适用了 , 如果到了这个时候 , 就去官方文档里面去寻找答案吧 https://developer.android.com/docs?hl=zh-cn
参考链接