首页 > 解决方案 > WifiManager.startScan() 不在电话上调用 onReceive()

问题描述

我需要通过 wi-fi 连接到设备,我正在使用WifiManager.startScan()它。理论上onReceive()应该被召回,但这不会发生。代码只是一直在等待回调。

问题是该代码实际上在装有 Android 8.1 的三星平板电脑上运行良好,但在我尝试过的任何手机(华为 Android 8.0 和三星 Android 9)上都没有。

以下是相关代码:

public void Init()
{
    try {
        mainWifiObj = (WifiManager) act.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        WifiScanReceiver wifiReceiver = new WifiScanReceiver(act, logger, mainWifiObj);
        act.getApplicationContext().registerReceiver(wifiReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
        mainWifiObj.startScan();            
    }
    catch (Exception ex)
    {
        ...
    }
}


public class WifiScanReceiver extends BroadcastReceiver {

...

public void onReceive(Context c, Intent intent) {

    try {            
        ...// doesn't get here
        }
    } catch (Exception e) {
        ...
    }
    ...

}

以下是我使用的所有重要清单权限:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

该代码不会产生任何错误,它只是默默地无法执行回调。

标签: android

解决方案


是的,我找到了答案。出于仅对 Android 设计人员合乎逻辑的原因,您必须启用基于位置的服务才能使其工作。因此,仅向您的应用授予所有需要的权限是不够的,还要转到设置并启用 LBS。

它在平板电脑上工作的原因是它启用了 LBS……但是应该如何控制所有这些依赖关系呢?


推荐阅读