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))

                    };
相关推荐
雨白1 天前
Android 快捷方式实战指南:静态、动态与固定快捷方式详解
android
hqk1 天前
鸿蒙项目实战:手把手带你实现 WanAndroid 布局与交互
android·前端·harmonyos
LING1 天前
RN容器启动优化实践
android·react native
恋猫de小郭1 天前
Flutter 发布官方 Skills ,Flutter 在 AI 领域再添一助力
android·前端·flutter
Kapaseker1 天前
一杯美式搞懂 Any、Unit、Nothing
android·kotlin
黄林晴1 天前
你的 Android App 还没接 AI?Gemini API 接入全攻略
android
恋猫de小郭2 天前
2026 Flutter VS React Native ,同时在 AI 时代 VS Native 开发,你没见过的版本
android·前端·flutter
冬奇Lab2 天前
PowerManagerService(上):电源状态与WakeLock管理
android·源码阅读
BoomHe2 天前
Now in Android 架构模式全面分析
android·android jetpack
二流小码农2 天前
鸿蒙开发:上传一张参考图片便可实现页面功能
android·ios·harmonyos