首页 > 系统 > Android > 正文

Android便携式热点的开启状态检测和SSID的获取方法

2019-12-12 04:03:10
字体:
来源:转载
供稿:网友

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();          }

以上所述是小编给大家介绍的Android便携式热点的开启状态检测和SSID的获取方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表