Android:如何监控WiFi信号强度

标签 android networking

当信号强度发生变化时,我会收到通知。我尝试创建以下方法并在 onCreate() 中调用它:

private void initializeWiFiListener(){
    Log.i(TAG, "executing initializeWiFiListener");

    String connectivity_context = Context.WIFI_SERVICE;
    final WifiManager wifi = (WifiManager)getSystemService(connectivity_context);

    if(!wifi.isWifiEnabled()){
        if(wifi.getWifiState() != WifiManager.WIFI_STATE_ENABLING){
            wifi.setWifiEnabled(true);
        }
    }

    registerReceiver(new BroadcastReceiver(){

        @Override
        public void onReceive(Context context, Intent intent) {
            WifiInfo info = wifi.getConnectionInfo();
            //TODO: implement methods for action handling
        }

    }, new IntentFilter(WifiManager.RSSI_CHANGED_ACTION));
}

如果有人可以检查该方法是否正确编写,我将不胜感激。我尝试运行该应用程序,但没有收到任何通知,我不确定这是因为在我运行调试的地方信号强度可能是恒定的还是因为缺少某些东西。

谢谢!

最佳答案

首先,确保您有 <uses-permission>对于 ACCESS_WIFI_STATE在你的 list 中。

其次,我不确定单个连接的通知,但要获取 radio 看到的所有内容的通知,您可以开始扫描:

wifi.startScan();

接下来,当我收到成功的结果时,我使用了 WifiManager.SCAN_RESULTS_AVAILABLE_ACTIONIntentFilter .

然后,在接收器中,我使用 getScanResults()来自 WifiManager对象,其中还包含信号强度。

要以这种方式停止它,您只需调用 unregisterRecever() (因此您需要保留它以供引用)。我还没有测试自己是否可以修改我的扫描代码以仅检查当前连接,但我知道我得到了很多结果——Wi-Fi 信号变化频繁且迅速。我想为了监控单个连接,您也可以只过滤扫描结果并查找设备当前连接的那个。

希望对您有所帮助。

关于Android:如何监控WiFi信号强度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1206891/

相关文章:

android - 什么是 android UI 设计工具

android - TokBox API 不适用于 S3?

C:从 OpenSSL 套接字读取

linux - ARP 缓存条目中的所有标志值是什么?

vba - 如何分配前端与指向不同驱动器号的链接表

android - Intellij 变慢,通常达到最大堆大小然后提示退出

android - 在Android中解析本地gpx文件

java - 如何在 Firebase 实时数据库中存储用户的提供商帐户?

java - 使用java通过网络在计算机之间发送文件

java - 服务器套接字,多客户端,每个 1 行