Android 安卓:如何监控WiFi信号强度

Android 安卓:如何监控WiFi信号强度,android,networking,Android,Networking,当信号强度改变时,我会收到通知。我尝试创建以下方法并在onCreate()中调用它: 如果有人能检查方法是否正确,我将不胜感激。我试图运行该应用程序,但没有收到任何通知,也不确定这是因为我运行调试的地方的信号强度可能是恒定的,还是因为缺少某些东西 谢谢 首先,确保您的清单中有用于访问WIFI\u状态的 其次,我不确定单个连接的通知,但要获取收音机看到的所有内容的通知,可以开始扫描: wifi.startScan(); 接下来,当我收到成功的结果时,我使用了IntentFilter中的WifiM

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

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


谢谢

首先,确保您的清单中有
用于
访问WIFI\u状态的

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

wifi.startScan();
接下来,当我收到成功的结果时,我使用了
IntentFilter
中的
WifiManager.SCAN\u results\u AVAILABLE\u ACTION

然后,在接收器中,我使用
WifiManager
对象中的
getScanResults()
,该对象也包含信号强度

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


我希望这能有所帮助。

请放弃我的解决方案:

在我的应用程序中,我有

@Override
protected void onResume() {
    super.onResume();
    networkStateReceiver = new NetworkStateReceiver(this);
    this.registerReceiver(networkStateReceiver, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
    this.registerReceiver(networkStateReceiver, new IntentFilter("android.net.wifi.SCAN_RESULTS"));
    networkStateReceiver.registerListener(this);
}
我的接收器中的onReceive看起来像:

@Override
public void onReceive(Context context, Intent intent) {
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    if (networkInfo != null && networkInfo.isConnectedOrConnecting()) {
        switch (networkInfo.getType()) {
            case ConnectivityManager.TYPE_ETHERNET:
                this.networkStateMessage = new NetworkStateMessage(networkInfo);
                break;
            case ConnectivityManager.TYPE_WIFI:
                this.networkStateMessage = new NetworkStateMessage(networkInfo, wifiManager.getConnectionInfo());
                worker.schedule(new Runnable() {
                    @Override
                    public void run() { wifiManager.startScan(); }
                }, 5, TimeUnit.SECONDS);
                break;
            default:
                this.networkStateMessage = null;
                break;
        }
    }
    notifyStateToAll(this.networkStateMessage);
}

如果wifi是活动网络,则只需每隔5秒发送一次to
startScan()?
@Override
public void onReceive(Context context, Intent intent) {
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    if (networkInfo != null && networkInfo.isConnectedOrConnecting()) {
        switch (networkInfo.getType()) {
            case ConnectivityManager.TYPE_ETHERNET:
                this.networkStateMessage = new NetworkStateMessage(networkInfo);
                break;
            case ConnectivityManager.TYPE_WIFI:
                this.networkStateMessage = new NetworkStateMessage(networkInfo, wifiManager.getConnectionInfo());
                worker.schedule(new Runnable() {
                    @Override
                    public void run() { wifiManager.startScan(); }
                }, 5, TimeUnit.SECONDS);
                break;
            default:
                this.networkStateMessage = null;
                break;
        }
    }
    notifyStateToAll(this.networkStateMessage);
}