当前位置: 移动技术网 > IT编程>移动开发>Android > Android便携式热点的开启状态检测和SSID的获取方法

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

登高望四海,dnf2.6中文无敌版,青岛开发区电视台

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网