zoukankan      html  css  js  c++  java
  • Android 热点相关操作

    Android未提供对该API的直接访问, 需要使用反射, 代码较简单, 如下

    GetHotspotState.java
    package club.seliote.hotspotscanner.utils;
     
    import android.content.Context;
    import android.net.wifi.WifiManager;
     
    import java.lang.reflect.Method;
     
    /**
     * 用于获取热点状态
     */
    public class GetHotspotState {
     
        /**
         * 获取热点状态
         * @return HOTSPOT_STATE的枚举
         * @throws Exception, 可能是GlobalApplicationContext或从反射中抛出
         */
        public static HOTSPOT_STATE getState() throws Exception {
            // 需要使用getApplicationContext(), 否则将报错
            // Error: The WIFI_SERVICE must be looked up on the Application context or memory will leak on devices < Android N.
            // Try changing  to .getApplicationContext()  [WifiManagerLeak]
            WifiManager wifiManager = (WifiManager) GlobalApplicationContext.getContext()
                    .getApplicationContext()
                    .getSystemService(Context.WIFI_SERVICE);
     
            // 不允许直接调用, 需要使用反射
            Method method = wifiManager.getClass().getMethod("getWifiApState");
            int stateCode = (Integer) method.invoke(wifiManager);
     
            // 部分API版本可能会有问题, 在这里处理一下
            if (stateCode > 10) {
                stateCode -= 10;
            }
     
            return HOTSPOT_STATE.class.getEnumConstants()[stateCode];
        }
     
        /**
         * 获取热点开启状态
         * @return 已开启返回true, 否则返回false
         * @throws Exception, 任何步骤出错将会抛出Exception
         */
        public static boolean isHotsoptOpen() throws Exception {
            return GetHotspotState.getState() == HOTSPOT_STATE.WIFI_AP_STATE_ENABLED;
        }
     
    }
    
    HOTSPOT_STATE.java
    package club.seliote.hotspotscanner.utils;
     
    /**
     * 热点状态的枚举
     */
    public enum HOTSPOT_STATE {
     
        // 正在关闭
        WIFI_AP_STATE_DISABLING,
     
        // 已关闭
        WIFI_AP_STATE_DISABLED,
     
        // 正在开启
        WIFI_AP_STATE_ENABLING,
     
        // 已开启
        WIFI_AP_STATE_ENABLED,
     
        //错误状态
        WIFI_AP_STATE_FAILED
     
    }
    

    接下来是获取相关的连接状态, 热点连接状态保存在文件/proc/net/arp中, 如果WiFi是开启的, 该文件保存的将是WiFi下的ARP信息, 所以获取热点连接状态前务必检查热点开启状态, 代码中获取一个 shell 直接 cat 即可, 就不上图了, 其中HW type是硬件类型(hardware type of the address from RFC 826), Flags指内部ARP结构, 当该设备连接时值为0x2, 断开时值为0x0, 由此便可进行热点连接设备的监控

  • 相关阅读:
    【CH 5501】环路运输【DP】【单调队列】
    【CH 5501】环路运输【DP】【单调队列】
    【POJ 1456】Supermarket【并查集】
    【POJ 1456】Supermarket【并查集】
    【POJ 1456】Supermarket【并查集】
    【POJ 2411】Mondriaan's Dream【DP】
    数据结构实验之二叉树二:遍历二叉树
    数据结构实验之二叉树二:遍历二叉树
    36 静态数据成员与静态成员函数
    36 静态数据成员与静态成员函数
  • 原文地址:https://www.cnblogs.com/seliote/p/9312962.html
Copyright © 2011-2022 走看看