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, 由此便可进行热点连接设备的监控

  • 相关阅读:
    多表联合查询,利用 concat 模糊搜索
    order by 中利用 case when 排序
    Quartz.NET 3.0.7 + MySql 动态调度作业+动态切换版本+多作业引用同一程序集不同版本+持久化+集群(一)
    ASP.NET Core 2.2 基础知识(十八) 托管和部署 概述
    ASP.NET Core 2.2 基础知识(十七) SignalR 一个极其简陋的聊天室
    ASP.NET Core 2.2 基础知识(十六) SignalR 概述
    ASP.NET Core 2.2 基础知识(十五) Swagger
    ASP.NET Core 2.2 基础知识(十四) WebAPI Action返回类型(未完待续)
    linux磁盘管理 磁盘查看操作
    linux磁盘管理 文件挂载
  • 原文地址:https://www.cnblogs.com/seliote/p/9312962.html
Copyright © 2011-2022 走看看