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()方法,获取到 热点的WifiConfigurationWifiConfiguration 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的获取方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!