Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android便攜式熱點的開啟狀態檢測和SSID的獲取,android熱點ssid

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

編輯:關於android開發

Android便攜式熱點的開啟狀態檢測和SSID的獲取,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();
                    }

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved