【问题标题】:List Wifi without enabling location service在不启用定位服务的情况下列出 Wifi
【发布时间】:2017-11-22 08:21:09
【问题描述】:

在开发扫描 WiFi 的应用程序时,我发现如果我关闭手机上的定位服务,它就无法工作。我已经为该应用程序提供了所有必要的权限。 - ACCESS_NETWORK_STATE、ACCESS_WIFI_STATE、ACCESS_COARSE_LOCATION。

这是我的代码:

WifiManager manager= (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
manager.startScan();

在接收器中:

int found = manager.getScanResults().size();

这个问题回答了部分问题。 Wifi scan results broadcast receiver not working

我的问题是:

  1. 如果位置服务关闭,应用是否可以列出 Wifi 接入点?

  2. 如果绝对需要定位服务,有没有办法让应用在扫描 wifi 接入点时开启定位服务?

【问题讨论】:

  • Google 认为使用蓝牙或 Wifi 可以获取用户的位置,而他不希望您这样做。这就是为什么从 Android 6 开始,您必须请求位置权限才能扫描/连接到 WIFI,以明确说明您可能能够使用该服务获取用户的位置。此外,如果您请求位置权限,您不必打开位置服务来扫描 WIFI。
  • @VladMatvienko 当我关闭定位服务时,Wifi 接入点的计数为 0,当我打开它时,计数是实际的 Wifi 点数。我正在使用 Android 6.0
  • 您在获取WIFI网络之前是否申请了位置权限?
  • 是的。我有。好像是安卓的bug。 stackoverflow.com/questions/35361064/…
  • 你确定你是在运行时请求的,而不仅仅是在清单中声明的​​吗?

标签: android android-wifi


【解决方案1】:

在不打开 GPS 的情况下获取 scanResult 的唯一方法是将应用的 targetSDKversion 设置为 21 or lower

这甚至适用于 Lolipop 及更高版本。

【讨论】:

    【解决方案2】:

    Android 8.0 和 Android 8.1:

    成功调用WifiManager.getScanResults() 需要以下任一权限:

    • ACCESS_FINE_LOCATION
    • ACCESS_COARSE_LOCATION
    • CHANGE_WIFI_STATE

    如果调用应用程序没有任何这些权限,调用将失败并出现 SecurityException。

    Android 9 及更高版本:

    成功调用WifiManager.startScan() 需要满足以下所有条件:

    • 您的应用拥有ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION 权限。
    • 您的应用拥有CHANGE_WIFI_STATE 权限。
    • 已在设备上启用定位服务(在“设置”>“位置”下)。

    要成功调用WifiManager.getScanResults(),请确保满足以下所有条件:

    • 您的应用拥有ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION 权限。
    • 您的应用拥有ACCESS_WIFI_STATE 权限。
    • 已在设备上启用定位服务(在“设置”>“位置”下)。

    如果调用应用程序不满足所有这些要求,调用将失败并出现 SecurityException。


    来自https://developer.android.com/guide/topics/connectivity/wifi-scan Google 文档。 可能他们需要 Android 6.+ 的“在设备上启用位置服务”要求,因为这是此权限限制首次揭示的版本,但他们似乎在文档中没有此要求,因为直到没有人回答这个问题现在。

    【讨论】:

      【解决方案3】:

      如果 定位服务已关闭?

      是的,只有系统应用程序才能在没有位置的情况下获得扫描结果,具有以下权限:

      android.permission.PEERS_MAC_ADDRESS 权限

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-10
        • 2019-07-27
        • 2019-04-05
        • 2014-04-10
        • 1970-01-01
        • 2011-09-19
        • 2016-08-18
        相关资源
        最近更新 更多