前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android实时获取热点已连接数(谷歌现成API可用,适用于第三方APP和系统APP)

Android实时获取热点已连接数(谷歌现成API可用,适用于第三方APP和系统APP)

作者头像
用户7557625
发布2020-07-15 10:56:51
1.9K0
发布2020-07-15 10:56:51
举报
文章被收录于专栏:程序猿的那点事

获取手机热点当前已连接数,目前网上大多数思路是通过读取/proc/net/arp文件可以得到连接当前热点的设备的IP,通过遍历来获取已连接数。但其实这种做法是有很大缺陷的,因为一旦设备断开后,该设备的IP还是存在该文件中,之后再通过这种方法获取的已连接设备数就是错误的。

其实 Android 源码中是有现成的 API 来获取已连接设备数的。

HotspotControllerImpl 中的 getNumConnectedDevices 函数。 frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java

代码语言:javascript
复制
public int getNumConnectedDevices() {
    return mNumConnectedDevices;
}

getNumConnectedDevices 获取的 mNumConnectedDevices 值是从哪里来的呢? 从代码里可以看出,是 HotspotControllerImpl 实现是 WifiManager 里的 SoftApCallback 接口。 /frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java

代码语言:javascript
复制
public void onNumClientsChanged(int numConnectedDevices) {
    mNumConnectedDevices = numConnectedDevices;
    fireHotspotChangedCallback(isHotspotEnabled(), numConnectedDevices);
}

WifiManager 的 SoftApCallback 接口 /frameworks/base/wifi/java/android/net/wifi/WifiManager.java

代码语言:javascript
复制
public interface SoftApCallback {
    /**
     * Called when soft AP state changes.
     *
     * @param state new new AP state. One of {@link #WIFI_AP_STATE_DISABLED},
     *        {@link #WIFI_AP_STATE_DISABLING}, {@link #WIFI_AP_STATE_ENABLED},
     *        {@link #WIFI_AP_STATE_ENABLING}, {@link #WIFI_AP_STATE_FAILED}
     * @param failureReason reason when in failed state. One of
     *        {@link #SAP_START_FAILURE_GENERAL}, {@link #SAP_START_FAILURE_NO_CHANNEL}
     */
    public abstract void onStateChanged(@WifiApState int state,
            @SapStartFailure int failureReason);

    /**
     * Called when number of connected clients to soft AP changes.
     *
     * @param numClients number of connected clients
     */
    public abstract void onNumClientsChanged(int numClients);
}

综上所述,如果是系统APP,可以直接调用 HotspotControllerImpl 中的 getNumConnectedDevices 函数来获取手机热点已连接设备数。如果是第三方 APP ,则可以实现 WifiManager 里的 SoftApCallback 接口,通过 onNumClientsChanged 函数里的 numConnectedDevices 参数来获取已连接设备数。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/01/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档