android - 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 设计人员合乎逻辑的原因,您必须启用基于位置的服务才能使其工作。因此,仅向您的应用授予所有需要的权限是不够的,还要转到设置并启用 LBS。
它在平板电脑上工作的原因是它启用了 LBS……但是应该如何控制所有这些依赖关系呢?
推荐阅读
- sql - 从 SQL 查询中嵌套 XML - 问题
- python - 从另一个数组创建数组的子集:Python
- python - 从列表列表中删除 \t
- spring - Spring Security 如何让用户 A 远离用户 B 的数据?
- ms-access - VBA - 嵌套类
- latex - TeXLive 的 ST3 Synthax 错误
- javascript - 如何从异步 API 返回 AngularJS 承诺
- python - 如何从 CSV 列表中找到目录中的文件,然后将该文件移动到另一个文件夹?Python
- android - 使用数据绑定更新可绘制对象
- batch-file - 如何使用带有批处理代码的 convert.exe 将所有 png 文件转换为 jpg