欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2024-02-22 18:28:10
wifi热点的开启状态和开启后的ssid如何获取呢? 打开wifimanager.java源码,可找到 getwifiapstate() 方法,惊喜的发现直接调用这个方法...

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的获取方法,希望对大家有所帮助