Android 正在执行网络扫描,需要对粗略位置进行许可

Android 正在执行网络扫描,需要对粗略位置进行许可,android,android-wifi,android-permissions,Android,Android Wifi,Android Permissions,我正在开发一个应用程序,它可以进行网络扫描,并将找到的所有SSID放入一个微调器 Android Studio警告您需要获得更改WIFI状态的权限。在将其添加到清单中时,Android Studio不会通过WifiManager发出任何警告。getScanResults()返回0网络。我发现我需要为访问\u位置添加/请求权限 我所需要的只是网络SSID,我不关心用户位于何处,那么为什么我/用户只需要允许位置权限即可获得可用网络的列表。以下是我目前如何进行扫描: activity.regi

我正在开发一个应用程序,它可以进行网络扫描,并将找到的所有SSID放入一个微调器

Android Studio警告您需要获得更改WIFI状态的权限。在将其添加到清单中时,Android Studio不会通过
WifiManager发出任何警告。getScanResults()
返回0网络。我发现我需要为
访问\u位置
添加/请求权限

我所需要的只是网络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();
            }
activity.registerReceiver(mWifiScannerReceiver,新的IntentFilter(WifiManager.SCAN\u RESULTS\u AVAILABLE\u ACTION));
wifiManager=(wifiManager)activity.getSystemService(Context.WIFI_服务);
wifiManager.startScan();
我的接收者:
if(intent.getAction().equals(WifiManager.SCAN\u RESULTS\u AVAILABLE\u ACTION))
{
List scanResults=wifiManager.getScanResults();
wifiNetworkList.clear();
//List ssids=new ArrayList();
对于(int i=0;i
我不在乎用户在哪里

是的,但是给定网络SSID,如果已知WiFi网络的位置,您可以找到用户所在的位置

为什么我/用户需要允许位置权限才能获得可用网络的列表


为了提高用户隐私,.

我理解用户必须请求权限作为Android 6的一部分。这不是我的问题。从用户的角度来看,我认为这对一个用户来说是相当令人困惑的,他有一个允许他们选择特定网络SSID的应用程序,该应用程序与位置无关,但用户必须授予访问其位置的权限。我可以想象,很多不懂的用户会拒绝定位,然后想知道为什么没有网络listed@Boardy:“我理解用户必须作为Android 6的一部分请求权限”--我的链接不是到运行时权限文档。Android 6.0发行说明中的“访问硬件标识符”文档提到了您不喜欢的特定行为。你的工作是向用户解释你为什么需要这个权限,以及他们拒绝这个权限的后果。用户和Android都无法确认您没有以某种方式使用SSID来识别用户的位置。@Boardy:无线网络(wifi路由器)的硬件macaddress(BSSID)是唯一的。假设我有一个特定区域所有BSSID的数据库,我知道每个无线路由器的确切位置。您通过应用程序进行wifi扫描进入该区域。意味着您的应用程序将获得您的(用户)位置。因此,您的应用程序需要用户的许可才能提供扫描结果(间接指您的位置)。