Ich arbeite an einer App, die einen Netzwerkscan durchführt und alle gefundenen SSIDs in einen Spinner legt.Netzwerk-Scan mit Erlaubnis für grobe Position durchführen
Android Studio warnt, dass Sie die Berechtigung für CHANGE_WIFI_STATE
benötigen. Nach dem Hinzufügen dieser in das Manifest gibt Android Studio keine Warnung durch die WifiManager.getScanResults()
zurückgibt 0 Netzwerke. Ich habe festgestellt, dass ich die Berechtigung für ACCESS_COARSE_LOCATION
hinzufügen/anfordern muss.
Alles, was ich brauche, ist die Netzwerk-SSID, es ist mir egal, wo der Benutzer sich befindet, also warum muss ich/der Benutzer die Standort-Erlaubnis zulassen, nur um eine Liste der verfügbaren Netzwerke zu erhalten. Unten ist, wie ich zur Zeit den Scan tue:
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();
}
Dank
Ich verstehe, dass der Benutzer um Erlaubnis als Teil von Android 6 bitten muss. Das ist nicht das Problem, das ich habe. Aus Benutzersicht ist es ziemlich verwirrend für einen Benutzer, der eine App hat, die es ihm erlaubt, eine bestimmte Netzwerk-SSID auszuwählen, die App hat nichts mit dem Standort zu tun, aber der Benutzer muss die Erlaubnis geben, auf ihren Standort zuzugreifen . Ich würde mir vorstellen, dass viele Benutzer, die nicht verstehen, würde nur den Standort verweigern, dann wundern sich, warum keine Netzwerke aufgeführt werden – Boardy
@Boardy: "Ich verstehe, der Benutzer muss die Erlaubnis als Teil von Android 6 anfordern" - mein Link ist nicht zu der Laufzeitberechtigungsdokumentation. Es ist die "Access to Hardware Identifier" -Dokumentation in den Android 6.0-Versionshinweisen, die das bestimmte Verhalten erwähnt, das Sie nicht mögen. Ihre Aufgabe besteht darin, den Benutzern zu erklären, warum Sie diese Berechtigung benötigen und welche Konsequenzen sie haben, wenn Sie diese Berechtigung verweigern. Weder der Benutzer noch Android können bestätigen, dass Sie nicht irgendwie die SSIDs verwenden, um den Standort des Benutzers zu identifizieren. – CommonsWare
@Boardy: Hardware-Macaddress (BSSID) von drahtlosen Netzwerken (WLAN-Router) sind einzigartig. Stellen Sie sich vor, ich habe eine Datenbank aller bssids in einem bestimmten Bereich, und ich kenne den genauen Standort jedes drahtlosen Routers. Sie haben diesen Bereich mit Ihrer App betreten und einen WLAN-Scan durchgeführt. bedeutet, dass deine App den (Nutzer-) Standort erhält. Dazu benötigt Ihre App die Berechtigung des Benutzers, Scanergebnisse anzugeben (indirekt Ihr Standort). – Rilwan