最近在做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();}

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
  5. Android四大基本组件介绍与生命周期
  6. android拍照与读取相册
  7. Android(安卓)报错:Caused by: android.os.FileUriExposedExcepti
  8. Android设置通知栏/状态栏透明改变通知栏颜色和app最上部分颜色
  9. 细数Android(安卓)Studio中使用junit4测试框架中的坑

随机推荐

  1. android系统信息(内存、cpu、sd卡、电量、
  2. Android控件开发——ListView
  3. android中的计步问题及计步传感器分析
  4. Android提权原理
  5. Android开发的未来发展方向,难道android真
  6. Android(安卓)内核分析
  7. Android(安卓)Activity 简介
  8. Android(安卓)Shape Drawable 静态使用和
  9. Android(安卓)tp的虚拟按键(virtual key)
  10. android使用属性动画代替补间动画