Android便携式热点的开启状态检测和SSID的获取方法
程序员文章站
2024-02-18 18:21:52
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的获取方法,希望对大家有所帮助