Android 热点相关操作

Posted seliote

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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, 由此便可进行热点连接设备的监控

以上是关于Android 热点相关操作的主要内容,如果未能解决你的问题,请参考以下文章

android小知识点代码片段

滑动 ViewPager 时如何清除片段相关状态

操作栏标签片段中的片段?

我用android的手机开便携式Wlan热点!屏幕锁定后就断开网络了,该怎么操作!

我用android的手机开便携式Wlan热点!屏幕锁定后就断开网络了,该怎么操作!

Kotlin Android Studio - setContenView - 绑定(片段)