WifiManager.startScan()未在电话上调用onReceive()

时间:2019-04-18 15:20:36

标签: android

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

问题是,此代码实际上可以在装有Android 8.1的三星平板电脑上正常运行,但不适用于我尝试过的任何手机(<华为Android 8.0和三星Android 9 )。 / p>

以下是相关代码:

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" />

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

1 个答案:

答案 0 :(得分:0)

是的,我找到了答案。出于仅对Android设计人员合理的原因,您必须启用基于位置的服务才能使其正常工作。因此,仅给应用程序提供所有必需的权限还不够,还需要进行设置并启用LBS。

它在平板电脑上工作的原因是在其上启用了LBS ...但是,如何控制所有这些依赖项呢?