Android-wifi常用接口,9个里面你看看几个对你有帮助!

为何要收藏这篇干货?------番茄憨憨的自我独白

我是番茄憨憨,我要坦白。

好记性不如烂笔头,对于常用的一些接口,出于其简单性,有些时候我们觉得没有记笔记的必要,但当真正用的时候,又得花费一段时间去搜索,踩过的坑不能再踩第二次,这里憨憨整理了自己比较常用的一些接口,Android-wifi常用接口,9个里面你看看几个对你有帮助!

使用接口需要导入的包:

java 复制代码
import android.net.wifi.WifiManager;
import android.net.ConnectivityManager;
import android.telephony.TelephonyManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.SupplicantState;

一、判断是否插卡

对于ap来说,有些时候需要监听是否插卡.

java 复制代码
        private boolean isNoSimcard(){
            TelephonyManager telMgr = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
            int simState = telMgr.getSimState();
            switch (simState) {
                case TelephonyManager.SIM_STATE_ABSENT:
                case TelephonyManager.SIM_STATE_UNKNOWN:
                case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
                    return true;
            }
            return false;
        }

二、判断是否在飞行模式

遇到在飞行模式下,wifi sta和ap的定制需求时可用

java 复制代码
        //添加飞行模式的广播action
        Intent intentFilter = new Intent();
        intentFilter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED);

        //在注册的广播中判断当前action是否是飞行模式action,如果是,可在接收到广播后定制sta或ap的需求。如下是做了一个飞模开,wifi关,飞模关,wifi恢复到前一状态的定制。
         if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)){
                boolean isAirplaneModeOn = intent.getBooleanExtra("state", false);
                Log.d(TAG,"isAirplaneModeOn == " + isAirplaneModeOn);
                if(isAirplaneModeOn){
                    if(mWifiManager.isWifiEnabled()){
                        mWifiManager.setWifiEnabled(false);
                        Settings.Global.putInt(mContext.getContentResolver(), "pre_wifi_state", 1);
                    } else {
                        Settings.Global.putInt(mContext.getContentResolver(), "pre_wifi_state", 0);
                    }
                } else {
                    int wifi_state = Settings.Global.getInt(mContext.getContentResolver(),"pre_wifi_state",0);
                    if (wifi_state == 1){
                        mWifiManager.setWifiEnabled(true);
                    } else {
                        Log.d(TAG,"pre_wifi_state is turn off");
                    }
                }
            }

三、判断当前网络是否已连接

注意:只要是有网络的情况下,此接口都会生效

java 复制代码
        /**
        * 判断当前是否有网
        */
        public boolean hasInternet(){
            ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
            return networkInfo != null && networkInfo.isConnected();
        }

四、判断当前网络类型是否为WiFi

网络类型有多种,由Connectivity统一管理,如只需要判断有网无网,使用三的接口即可,但如果你进一步想判断当前网络类型是否为WiFi,下面的接口能够对其进行区分。

ruby 复制代码
    /**
     * 判断当前网络是否为WiFi
     */
    public static boolean isConnectedToWiFi(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        
        if (connectivityManager != null) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                // 对于API 23及以上版本
                NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
                if (capabilities != null) {
                    return capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) &&
                           capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
                }
            } else {
                // 对于API 23以下版本
                NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
                return networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI && networkInfo.isConnected();
            }
        }
        return false;
    }

五、WiFi状态设置和判断

通过WifiManager接口来控制,实际上大部分和Wifi相关,在WifiManager中是能找到相关接口的。

scss 复制代码
//启用或关闭wifi
mWifiManager.setWifiEnabled(true||false);
//检测wifi是否开启
mWifiManager.isWifiEnabled();
//检测Ap是否开启
mWifiManager.isWifiApEnabled();

六、获取当前连接wifi的频段信息

下面举了一个获取一个连接wifi频段信息的例子,如果想要获取更多连接wifi的信息,可以通过打印WifiInfo完整查看.

scss 复制代码
    /**
     * BAND1(5.2G):5.15~5.25G
     * BAND2(5.3G):5.25~5.35G
     * BAND3(5.5G):5.47~5.725G
     * BAND4(5.8G):5.725~5.85G
     * BAND0(2.4G):2.4~2.484G
     *
     * @return
     */
    private int getFrequencyRange() {
        int frequency = getCurrentFrequency(mContext);
        if (frequency > 5150 && frequency < 5250) {
            return WIFI_5G2;
        }
        if (frequency > 5250 && frequency < 5350) {
            return WIFI_5G3;
        }
        if (frequency > 5470 && frequency < 5725) {
            return WIFI_5G5;
        }
        if (frequency > 5725 && frequency < 5850) {
            return WIFI_5G8;
        }
        if (frequency > 2400 && frequency < 2484) {
            return WIFI_2G4;
        }
        return WIFI_ERR;
    }

    private static int getCurrentFrequency(Context context) {
        WifiManager wifiManager = (WifiManager) context
                .getSystemService(Context.WIFI_SERVICE);
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        List<ScanResult> scanResults = wifiManager.getScanResults();
        for (ScanResult result : scanResults) {
            if (result.BSSID.equalsIgnoreCase(wifiInfo.getBSSID())
                    && result.SSID.equalsIgnoreCase(wifiInfo.getSSID()
                    .substring(1, wifiInfo.getSSID().length() - 1))) {
                Slog.d(TAG, "getCurrentFrequency frequency: " + result.frequency);
                return result.frequency;
            }
        }
        return -1;
    }

七、广播监听WiFi扫描结果.

scss 复制代码
        //注册扫描的IntentFilter和广播
        IntentFilter mScanResultsAvailable =
                new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
        registerReceiver(mScanResultsReceiver, mScanResultsAvailable);
        
        
        private BroadcastReceiver mScanResultsReceiver = new BroadcastReceiver() {
        
        @Override
        public void onReceive(Context context, Intent intent) {
            List<ScanResult> results = mWifiManager.getScanResults();
            for(ScanResult result : results) {
            //这里将接收到每一个扫描到的对象,可对其进行处理
            }
        }
    };

八、广播监听WiFi状态变化.

java 复制代码
        //注册wifi状态变化的IntentFilter和广播
        IntentFilter mWifiStateIntent = new IntentFilter(
                WifiManager.WIFI_STATE_CHANGED_ACTION);
        registerReceiver(mWifiStateReceiver, mWifiStateIntent);

    private BroadcastReceiver mWifiStateReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context wifiState_context,
                              Intent wifiState_intent) {
            wifiUtils.slog("wifiActivity:: mWifiStateReceiver onReceive");
            String action = wifiState_intent.getAction();
            int wifiState = wifiState_intent.getIntExtra(
                    WifiManager.EXTRA_WIFI_STATE, 0);

            switch (wifiState) {
                case WifiManager.WIFI_STATE_DISABLING:
                    wifiUtils.slog("wifiActivity:: Wifi state : DISABLING");
                    break;
                case WifiManager.WIFI_STATE_DISABLED:
                    wifiUtils.slog("wifiActivity:: Wifi state : DISABLED");
                    break;
                case WifiManager.WIFI_STATE_ENABLING:
                    wifiUtils.slog("wifiActivity:: Wifi state : ENABLING");
                    break;
                case WifiManager.WIFI_STATE_ENABLED:
                    wifiUtils.slog("wifiActivity:: Wifi state : ENABLED");
                    break;
                case WifiManager.WIFI_STATE_UNKNOWN:
                    wifiUtils.slog("wifiActivity:: Wifi state : UNKNOWN");
                    break;
                default:
                    wifiUtils.slog("wifiActivity:: Wifi state : BAD");
                    break;
            }
        }
    };

九、广播监听WiFi认证状态.

scss 复制代码
        //注册supplicant状态变更的IntentFilter和广播
        IntentFilter mSupplicantStateIntent = new IntentFilter(
                WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
        registerReceiver(mSupplicantStateReceiver, mSupplicantStateIntent);

        private BroadcastReceiver mSupplicantStateReceiver =
            new BroadcastReceiver() {
                @Override
                public void onReceive(Context context, Intent intent) {
                    wifiUtils.slog("wifiActivity:: mSupplicantStateReceiver onReceive");
                    String action = intent.getAction();
                    if(action.equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) {
                        wifiUtils.slog("wifiActivity:: action.equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)");
                        SupplicantState supplicantState = ((SupplicantState) intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE));
                        //SupplicantState包含非常多的wifi认证状态,可连接一次wifi具体打印机supplicantState值出来观察wifi在每个阶段的连接.
                        supplicantState.equals(SupplicantState.COMPLETED))

                    };
相关推荐
kymjs张涛22 分钟前
前沿技术周刊 2025-06-09
android·前端·ios
用户2018792831671 小时前
View的filterTouchesWhenObscured属性
android
宋智孝的小迷弟2 小时前
抽丝剥茧带你掌握 Kotlin Flow(一):协程时代的异步数据流处理“神器”
android·面试·app
小鱼人爱编程3 小时前
现代大前端是如何编码的?
android·前端·flutter
移动开发者1号3 小时前
Android中Activity、Task与Process的关系
android·kotlin
琪阿不会编程4 小时前
Mysql8 忘记密码重置,以及问题解决
android·数据库·sql·mysql
CYRUS_STUDIO4 小时前
一文搞懂 SO 脱壳全流程:识别加壳、Frida Dump、原理深入解析
android·安全·逆向
移动开发者1号4 小时前
Activity onCreate解析
android·kotlin
帅得不敢出门7 小时前
Android Framework预装traceroute执行文件到system/bin下
android
xzkyd outpaper7 小时前
从面试角度回答Android中ContentProvider启动原理
android·面试·计算机八股