Android 热点开关状态的判断和获取热点ssid
16lz
2021-01-23
最近在做Android盒子开发的时候,需要对热点进行开关和对状态的判断,经过查询相关资料找到解决方案
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; } }
如果getWifiApState()被隐藏,就得调用反射来获取
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}
2.通过反射获取到热点的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设置通知栏/状态栏透明改变通知栏颜色和app最上部分颜色
- Android中滑屏初探 ---- scrollTo 以及 scrollBy方法使用说明
- Android异步加载图像小结 (含线程池,缓存方法)
- Android的网络状态判断
- android上一些方法的区别和用法的注意事项
- Android实现下载文件功能的方法
- Android 通讯录中用到的关于按名字首字母排序方法