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

保存网络// 保存网络.public static void saveNetworkByConfig(WifiManager manager, WifiConfiguration config) {if (manager == null) {return;}try {Method save = manager.getClass().getDeclaredMethod("save", WifiConfiguration.class, Class.forName("android.net.wifi.WifiManager$ActionListener"));if (save != null) {save.setAccessible(true);save.invoke(manager, config, null);}} catch (Exception e) {e.printStackTrace();}}添加网络// 添加网络.public static int addNetwork(WifiManager manager, WifiConfiguration config) {if (manager != null) {manager.addNetwork(config);}}忘记网络// 忘记网络.public static void forgetNetwork(WifiManager manager, int networkId) {if (manager == null) {return;}try {Method forget = manager.getClass().getDeclaredMethod("forget", int.class, Class.forName("android.net.wifi.WifiManager$ActionListener"));if (forget != null) {forget.setAccessible(true);forget.invoke(manager, networkId, null);}} catch (Exception e) {e.printStackTrace();}}禁用网络// 禁用网络.public static void disableNetwork(WifiManager manager, int netId) {if (manager == null) {return;}try {Method disable = manager.getClass().getDeclaredMethod("disable", int.class, Class.forName("android.net.wifi.WifiManager$ActionListener"));if (disable != null) {disable.setAccessible(true);disable.invoke(manager, networkId, null);}} catch (Exception e) {e.printStackTrace();}}断开连接// 断开连接.public static boolean disconnectNetwork(WifiManager manager) {return manager != null && manager.disconnect();}短暂禁用网络// 禁用短暂网络.public static void disableEphemeralNetwork(WifiManager manager, String SSID) {if (manager == null || TextUtils.isEmpty(SSID))return;try {Method disableEphemeralNetwork = manager.getClass().getDeclaredMethod("disableEphemeralNetwork", String.class);if (disableEphemeralNetwork != null) {disableEphemeralNetwork.setAccessible(true);disableEphemeralNetwork.invoke(manager, SSID);}} catch (Exception e) {e.printStackTrace();}}监控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;}}}}

推荐阅读