[Android] 监听WiFi状态

注册权限

使用WiFi需要保证在 AndroidManifest.xml 中添加如下权限:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"
        android:required="false"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"
        android:required="false"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
        android:required="false" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

申请权限

我们在开始监听之前要确定权限均以开启。

public static final int REQUEST_CODE = 100001;//定义权限返回码
private boolean checkPermissionAllGranted(String[] permissions,Context context) {
        for (String permission : permissions) {
            if (ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                // 只要有一个权限没有被授予, 则直接返回 false
                return false;
            }
        }
        return true;
    }
boolean isAllGranted = checkPermissionAllGranted(
                        new String[] {
                                Manifest.permission.ACCESS_FINE_LOCATION,
                                Manifest.permission.ACCESS_COARSE_LOCATION,
                                Manifest.permission.ACCESS_WIFI_STATE,
                                Manifest.permission.ACCESS_NETWORK_STATE
                        }
                        ,CurrentActivity.this);

if (isAllGranted) {// 如果这3个权限全都拥有, 则直接执行
                    /* 执行代码 */
                }
                else ActivityCompat.requestPermissions(CurrentActivity.this,new String[]{
                        Manifest.permission.ACCESS_FINE_LOCATION,
                        Manifest.permission.ACCESS_COARSE_LOCATION,
                        Manifest.permission.ACCESS_WIFI_STATE,
                        Manifest.permission.ACCESS_NETWORK_STATE
                },REQUEST_CODE);//申请权限

监听

安卓中WiFi状态信息变化时系统会广播对应消息,我们可以注册一个receiver来接受这个消息,receiver接收到消息后会调用我们定义的 onReceive 函数,我们可以在函数中检查消息码来监控WiFi的状态。

onReceive

创建一个类继承于 BroadcastReceiver 然后在其中实现 onReceive 函数。

public static class WIFIreceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent){
            String action = intent.getAction();
            if(action != null){
                switch (action){
                    case WifiManager.WIFI_STATE_CHANGED_ACTION://监控WiFi开启与关闭
                        int Wstate = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,0);
                        switch (Wstate){
                            case WifiManager.WIFI_STATE_ENABLED:
                                Log.d("WIFI_info","WIFI已开启");
                                break;
                            case WifiManager.WIFI_STATE_DISABLED:
                                Reference.CurrentWIFI = "";
                                Log.d("WIFI_info","WIFI已关闭");
                                break;
                        }
                        break;
                    case WifiManager.NETWORK_STATE_CHANGED_ACTION://监控WiFi连接是否切换
                        String bssid = ConditionInfo.WIFI.getBSSID(context);
                        if(!Reference.CurrentWIFI.equals(bssid) && !bssid.equals("") && !bssid.equals("00:00:00:00:00:00")){
                            Reference.CurrentWIFI = bssid;
                            Log.d("WIFI_info","WIFI已修改"+Reference.CurrentWIFI);
                        }
                        break;
                        //bssid是WiFi的物理地址,ssid是WiFi的名称
                }
            }
        }

关于状态码的更多知识请参考安卓文档 WifiManager

注册receiver

最后需要在需要进行监测的Activity中注册我们写好的receiver。

/* CurrentActivity */
            WIFIreceiver = new WIFIreceiver();   //创建receiver实例
            IntentFilter filter = new IntentFilter();//创建filter实例
            filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
            filter.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION);
            filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);//添加我们所需要检测的状态
            context.registerReceiver(WIFIreceiver,filter); //在当前activity中注册该receiver

完成这一步我们就可以顺利地检测WiFi状态的变化了。

原文连接:在Android中监控WiFi变化

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
监听 Android 设备的 WiFi 状态,可以使用以下代码: 首先,在 AndroidManifest.xml 文件中添加以下权限: ```xml <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> ``` 然后,在你的 Activity 或 Service 中创建一个 BroadcastReceiver,并在其中处理 WiFi 状态变化的逻辑。示例代码如下: ```java public class WifiBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action != null && action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) { int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN); switch (wifiState) { case WifiManager.WIFI_STATE_ENABLED: // WiFi 已经打开 break; case WifiManager.WIFI_STATE_DISABLED: // WiFi 已经关闭 break; case WifiManager.WIFI_STATE_UNKNOWN: // WiFi 状态未知 break; } } } } ``` 最后,在你的 Activity 或 Service 中注册 BroadcastReceiver。示例代码如下: ```java public class MainActivity extends AppCompatActivity { private WifiBroadcastReceiver wifiBroadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wifiBroadcastReceiver = new WifiBroadcastReceiver(); IntentFilter intentFilter = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION); registerReceiver(wifiBroadcastReceiver, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(wifiBroadcastReceiver); } } ``` 这样,当 WiFi 状态发生变化时,就会触发 BroadcastReceiver 中的 onReceive() 方法,你就可以在其中处理相应的逻辑了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值