【问题标题】:Android wifimanager.startscan() in main thread or in background?Android wifimanager.startscan() 在主线程还是在后台?
【发布时间】:2015-02-19 12:17:19
【问题描述】:

当我想获取可用 wifi 网络列表时,最好使用 startscan 的哪种理念? 我在主线程中这样做:

List<ScanResult> wifiList;
wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);
if (!wifiManager.isWifiEnabled()) wifiManager.setWifiEnabled(true);
wifiManager.startScan();
wifiList = wifiManager.getScanResults();
for (int i = 0; i < wifiList.size(); i++) {
    String[] networkInfo = wifiList.get(i).toString().split(",");
    if (networkInfo[0].trim().equals(AP_SEARCH_SSID))
        petcub_networks++;
}

在我用于测试的所有设备中,它都可以正常工作,除了少数三星智能手机。它发生在客户设备上,我无法快速调试它。 有人和三星有同样的问题吗?或者会更好地在后台扫描AP?能解决我的问题吗?

**UPD:**接下来我的问题的本质:我想扫描可用的 wifi 网络,然后如果找到需要的网络,我将连接到它(到套接字)。此过程在管道中使用,如第一步。

【问题讨论】:

  • 究竟是什么问题?您绝对应该为WifiManager.SCAN_RESULTS_AVAILABLE_ACTION 注册一个接收器,而不是立即调用getScanResults()
  • 你的意思是在广播接收器中使用这个功能?
  • 检查我的答案,它从多个角度解决了这个问题
  • 实际上我的要求的问题更直接。三星设备总是返回空的 ssid 名称。

标签: android android-wifi


【解决方案1】:

很抱歉通知您,但代码 sn-ps 有很多缺失的元素(就效率而言)并且也不正确,让我详细说明一下:

  • startScan() 仅向操作系统请求扫描,在某些情况下它不会立即启动扫描。所以你需要检查调用的返回布尔值
  • 在调用 startScan 之前,您应该为 WifiManager.SCAN_RESULTS_AVAILABLE_ACTION 注册一个 BroadcastReceiver,并且只有在此之后,您才能获得结果
  • 您可能不需要多次启动扫描。可能已经有了一个相对新鲜的结果。您可以查看 ScanResult 的时间戳值 (API 17) 来估计扫描的“新鲜程度”
  • 你根本没有检查设备是否有WIFI硬件
  • 只有在 Wifi 开启时才启动扫描,即使 WIFI 关闭,Android 设备(我认为是 API 16 起)也可以扫描网络 要检查您是否可以启动扫描,请使用此(在函数中返回布尔值):

    if (!context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI)) {
        return false;
    }
    WifiManager mWifiManager = (WifiManager) context
            .getSystemService(Context.WIFI_SERVICE);
    
    
    boolean ret = mWifiManager.isWifiEnabled();
    ret = ret || ((android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) &&
            mWifiManager.isScanAlwaysAvailable());
    return ret;
    

【讨论】:

  • 我最少使用 14 个 sdk。我正在检查wifi是否可用。但最感兴趣的是:我只在三星上有这个问题。 WTF???这太奇怪了
  • 确实,我同意ceran
猜你喜欢
  • 1970-01-01
  • 2020-11-28
  • 2020-10-15
  • 2011-01-15
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多