在安卓系统中监控热点状态

9
我是一个新手安卓开发者。我想通过broadcastreceiver (onReceive) 接收信息,以知道用户是否启用/禁用"便携式Wi-Fi热点" (设置->无线和网络->USB共享网络与便携式热点)。请查看这个链接。我发现有"android.net.wifi.WIFI_AP_STATE_CHANGED"但它被隐藏了。我该怎么使用呢?谢谢。
2个回答

27

要接收启用/禁用“便携式 WiFi 热点”事件,您需要注册一个接收器以监听 WIFI_AP_STATE_CHANGED 事件:

mIntentFilter = new IntentFilter("android.net.wifi.WIFI_AP_STATE_CHANGED");
registerReceiver(mReceiver, mIntentFilter);

在 BroadcastReceiver 的 onReceive 方法中,我们可以使用 wifi_state 提取 WiFi 热点的状态:

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if ("android.net.wifi.WIFI_AP_STATE_CHANGED".equals(action)) {

             // get Wi-Fi Hotspot state here 
            int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);

            if (WifiManager.WIFI_STATE_ENABLED == state % 10) {
                // Wifi is enabled
            }

        }
    }
};
在AndroidManifest中声明接收器来执行android.net.wifi.WIFI_AP_STATE_CHANGED操作,并在AndroidManifest.xml中包含所有必要的wifi权限。
编辑:将接收器添加到AndroidManifest中,如下所示:
<receiver android:name=".WifiApmReceiver">
    <intent-filter>
        <action android:name="android.net.wifi.WIFI_AP_STATE_CHANGED" />
    </intent-filter>
</receiver>

您可以查看此示例以获取更多帮助


谢谢您的快速评论。但是,您能否向我展示如何在Android清单中声明,因为这样更容易理解。 - TrisNguyen
只想说非常感谢...我成功让它工作了!感谢你的帮助。 - TrisNguyen
3
从intent.getIntExtra("wifi_state", 0)接收到的wifi_state值在10-13范围内。这些值在WifiManager类中定义的wifi_state值之外,参考链接:http://developer.android.com/reference/android/net/wifi/WifiManager.html。我们如何知道WiFi热点是启用还是禁用?更准确地说,我们应该检查哪个wifi_state值以获取此信息? - user802467
@user802467,你可以使用 if (WifiManager.WIFI_STATE_ENABLED == state % 10) - user1922137
非常感谢,它有效!唯一的问题是接收器被调用了两次,但我会找到解决方法的 :) - Jesus Almaral - Hackaprende
显示剩余7条评论

0
嗨,#user802467,这里有你在评论中提出的问题的答案,链接如下:如何获取wifi热点状态。由于版本4及以上,值介于10-13之间。你可以按照链接中的说明轻松获取实际状态。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接