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

转载于:https://www.cnblogs.com/seliote/p/9312962.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值