Android便攜式熱點的開啟狀態檢測和SSID的獲取


WIFI熱點的開啟狀態和開啟后的SSID如何獲取呢?

 

打開WifiManager.java源碼,可找到 getWifiApState() 方法,驚喜的發現直接調用這個方法就能獲取到熱點的狀態,然而在調用的時候並不能調用到這個方法。。。這個方法被隱藏起來了,目前我是通過反射調用的。

 

/**
     * Gets the Wi-Fi enabled state.
     * @return One of {@link #WIFI_AP_STATE_DISABLED},
     *         {@link #WIFI_AP_STATE_DISABLING}, {@link #WIFI_AP_STATE_ENABLED},
     *         {@link #WIFI_AP_STATE_ENABLING}, {@link #WIFI_AP_STATE_FAILED}
     * @see #isWifiApEnabled()
     *
     * @hide Dont open yet
     */
    public int getWifiApState() {
        try {
            return mService.getWifiApEnabledState();
        } catch (RemoteException e) {
            return WIFI_AP_STATE_FAILED;
        }
    }

 

於是就寫了一個放射,獲取熱點的狀態

 

 public static boolean isWifiApOpen(Context context) {
        try {
            WifiManager manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            //通過放射獲取 getWifiApState()方法
            Method method = manager.getClass().getDeclaredMethod("getWifiApState");
            //調用getWifiApState() ,獲取返回值
            int state = (int) method.invoke(manager);
            //通過放射獲取 WIFI_AP的開啟狀態屬性
            Field field = manager.getClass().getDeclaredField("WIFI_AP_STATE_ENABLED");
            //獲取屬性值
            int value = (int) field.get(manager);
            //判斷是否開啟
            if (state == value) {
                return true;
            } else {
                return false;
            }
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
        return false;
    }

 

通過  getWifiApState() 方法返回值的注釋,可以找到如下幾種狀態,拿到當前狀態值之后,只需要對比各種狀態的值,就知道熱點的開啟狀態了

     * @return One of {@link #WIFI_STATE_DISABLED},
     *         {@link #WIFI_STATE_DISABLING}, {@link #WIFI_STATE_ENABLED},
     *         {@link #WIFI_STATE_ENABLING}, {@link #WIFI_STATE_UNKNOWN}

 

同樣的,也是通過反射獲取到熱點的SSID

 

                    try {
                        WifiManager manager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
                        //拿到getWifiApConfiguration()方法
                        Method method = manager.getClass().getDeclaredMethod("getWifiApConfiguration");
                        //調用getWifiApConfiguration()方法,獲取到 熱點的WifiConfiguration
                        WifiConfiguration configuration = (WifiConfiguration) method.invoke(manager);
                        ssid = configuration.SSID;
                    } catch (NoSuchMethodException e) {
                        e.printStackTrace();
                    } catch (InvocationTargetException e) {
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM