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

时间: 2024-08-29 20:07:29

Android 热点相关操作的相关文章

android + File相关操作

File相关的,有很多操作,比如写入.读出.判断文件.获取文件列表...等等 相关链接: http://blog.csdn.net/avi9111/article/details/6917187 //写的干净 http://blog.csdn.net/qianfu111/article/details/10054993 //function写的 不错

Android开发相关操作

命令行启动DDMS工具,前提是有这个工具 ~/rustsoftware/adt-bundle-linux-x86_64-20140702/sdk/tools$ ./ddms 查看机器内存情况: adb shell进入机器 [email protected]:/ # cat proc/meminfo MemTotal:        4194304 kB MemFree:         2148688 kB MemAvailable:    2760656 kB

android DataBase的相关操作(建立表结构和创建表)

先建立一个table的基类: public abstract class DbBaseTable { private static final String TAG = "DbBaseTable"; /** * @return the DB table name */ abstract String getName(); /** * Creates the DB table according to the DB scheme * * @param db */ abstract voi

家庭记账本app进度之android中AlertDialog的相关应用以及对日期时间的相关操作(应用alertdialog使用的谈话框)

对于AlertDialog的相关知识: 1.创建构造器AlertDialog.Builder的对象:    2.通过构造器对象调用setTitle.setMessage.setIcon等方法构造对话框的标题.信息和图标等内容:    3.根据需要调用setPositive/Negative/NeutralButton()方法设置正面按钮.负面按钮和中立按钮:    4.调用构造器对象的create方法创建AlertDialog对象:    5.AlertDialog对象调用show方法,让对话框

ubuntu14.04 配置android及sdk等相关操作

1.安装jdk,具体步骤在前面的文章中有专门写过 2.下载eclipse,网上一般推荐下载Eclipse IDE for Java Developers,但我觉得一般java开发这都用Eclipse IDE for Java EE Developers,插件也比较全,所以我推荐下后者 3.下载sdk a.最好的使用代理访问http://developer.android.com,因为比较快 b.访问http://developer.android.com/sdk/index.html,下载sdk

Android UI相关开源项目库汇总

最近做了一个Android UI相关开源项目库汇总,里面集合了OpenDigg 上的优质的Android开源项目库,方便移动开发人员便捷的找到自己需要的项目工具等,感兴趣的可以到GitHub上给个star. 抽屉菜单 MaterialDrawer ★7337 - 安卓抽屉效果实现方案 Side-Menu.Android ★3865 - 创意边侧菜单 FlowingDrawer ★1744 - 向右滑动流动抽屉效果 SlidingRootNav ★1338 - 仿DrawerLayout的View

Android Sqlite的操作

1.写一个类继承SQLiteOpenHelper public class MyHelper extends SQLiteOpenHelper { public MyHelper(Context context) { super(context, Const.DB_DBNAME , null, Const.DB_VERSION); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteData

[Android]蓝牙相关接口及方法

首先,要操作蓝牙,先要在AndroidManifest.xml里加入权限 <uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permissionandroid:name="android.permission.BLUETOOTH" /> 然后,看下api,Android所有关于蓝牙开发的类都在android.bluetooth包下,共有8个类

我的Android开发相关文章

Pro Android学习笔记: Pro Android学习笔记(一零七):2D动画(2):layout渐变动画 2014.7.25 Pro Android学习笔记(一零六):2D动画(1):frame by frame 2014.7.21 Pro Android学习笔记(一零五):Alarm Manager(3):request code 2014.7.17 Pro Android学习笔记(一零四):Alarm Manager(2):周期发送和取消 2014.7.15 Pro Android学