广播接收器多久获取一次wifi扫描更新?

时间:2018-08-10 17:40:31

标签: java android

目标:定期获取wifi扫描结果(我可以选择时间段)。

问题:我正在尝试获取wifi扫描结果。我正在使用此代码段。 据我了解,当我使用SCAN_RESULTS_AVAILABLE_ACTION常量注册接收器时,我的意思是:“当有接入点扫描结果广播可用时,通知我”。

我搜索了发现startScan()是我正在寻找的方法,但很不幸。...

  

公共布尔startScan()

     

此方法在API级别28中已弃用。   应用程序触发扫描请求的功能将在以后的版本中删除。

问题::是否有一种方法可以代替startScan()或在需要时触发扫描的另一种方法? 我怎么知道wifi扫描更新的频率?

 wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);

        // Check if wifi is enabled. Enables it otherwise.
        if (!wifiManager.isWifiEnabled()) {
            //Toast.makeText(getApplicationContext(), "WiFi is disabled. Let's enable it.", Toast.LENGTH_SHORT).show();
            // CHANGE_WIFI_STATE permission allow this
            wifiManager.setWifiEnabled(true);
        }

        wifiScanReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {

                localMaxSignalStrength = 1;
                results = wifiManager.getScanResults();

                for (int i = 0; i < results.size(); i++) {

                    ScanResult el = results.get(i);
                    int signalLevel = wifiManager.calculateSignalLevel(el.level, 5);

                    if (signalLevel > localMaxSignalStrength){
                        localMaxSignalStrength = signalLevel;
                    }

                    Toast.makeText(getApplicationContext(), "SSID:" + el.SSID + "frequency" + el.frequency + "lev:" + signalLevel, Toast.LENGTH_SHORT).show();
                }
                unregisterReceiver(this);

            }
        };

        registerReceiver(wifiScanReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));

编辑1

更好地阅读广播接收器上的文档我发现,如果您不拨打取消注册接收器,则会继续接收您注册的广播消息。

  

要停止接收广播,请致电   unregisterReceiver(android.content.BroadcastReceiver)。务必   当您不再需要接收器或上下文不存在时,请注销该接收器   不再有效。

我尝试取消对unregisterReceiver(this);的注释,似乎现在我不断收到Wifi扫描结果。

编辑2(09/2018)

我在上面写的内容,特别是我连续接收扫描结果的事实对于 Android 4.2.2(JellyBean)是正确的。由于我已经在 Android 7.0(牛轧糖)上进行了测试,所以我注意到(没有注销接收器)我没有像以前的操作系统那样连续接收wifi扫描结果版本,但速度很慢(两次扫描之间的分钟数)。

在这种情况下,我被迫使用WifiManager的{​​{1}}方法(注意:API 28不推荐使用)。无论如何,此方法有一些限制,如下所述。

  

以下限制适用于使用的扫描频率   WifiManager.startScan()。

     

Android 8.0和Android 8.1:

     

每个后台应用程序可以在30分钟内扫描一次。

     

Android 9及更高版本:

     

每个前台应用程序可以在2分钟内扫描四次。这个   可以在短时间内进行扫描。

     

所有后台应用程序组合在一起可以在30分钟内扫描一次。

0 个答案:

没有答案