我正在开发一个进行网络扫描的应用程序,并将所有找到的SSID放入微调器中。
Android Studio警告您需要CHANGE_WIFI_STATE
的权限。将此添加到清单后,Android Studio不会通过WifiManager.getScanResults()
返回0网络发出任何警告。我发现我需要为ACCESS_COARSE_LOCATION
添加/请求权限。
我只需要网络SSID,我不关心用户所在的位置,为什么我/用户需要允许位置权限才能获得可用网络列表。以下是我目前正在进行扫描的方式:
activity.registerReceiver(mWifiScannerReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
wifiManager = (WifiManager)activity.getSystemService(Context.WIFI_SERVICE);
wifiManager.startScan();
And my receiver:
if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION))
{
List<ScanResult> scanResults = wifiManager.getScanResults();
wifiNetworkList.clear();
//List<String> ssids = new ArrayList<>();
for (int i = 0; i < scanResults.size(); i++)
{
wifiNetworkList.add(scanResults.get(i).SSID);
//ssids.add(scanResults.get(i).SSID);
}
//wifiNetworkList = ssids;
wifiAdapter.notifyDataSetChanged();
}
答案 0 :(得分:3)
我不关心用户所在的位置
是的,但考虑到网络SSID,您可以了解用户所在的位置,是否知道该WiFi网络的位置。
为什么我/用户需要允许位置权限才能获得可用网络列表
为了改善用户隐私,as of Android 6.0。
答案 1 :(得分:1)
“是的,但是根据网络SSID,您可以找到用户所在的位置,如果已知该WiFi网络的位置。”
上述情况极不可能发生。更有可能的是,要求位置服务扫描WiFi,谷歌可以收集所有看到的WiFi网络的GPS坐标及其相对信号强度。允许创建这样的数据库。
这实际上不属于Google或任何人的业务,并且是一个巨大的隐私和安全问题。谷歌做了许多伟大而美好的事情,包括Android。但他们也可能有一个更黑暗的一面,并不关心后果。