SCAN_RESULTS_AVAILABLE_ACTION Rückkehr leere Liste in Android 6.0
Gestern mein Nexus 5 bekommen das update aus Android MNC
version 6.0 - Marshmallow
.
Seit dann, die Aktion zu scan der verfügbaren Netze das Gerät nicht mehr erhalten die Liste, in diesem Fall das Ergebnis-Liste eine Größe von 0, auch mit 10+ Wi-Fi-Netzwerke aufgelistet in der Wifi-system-Einstellungen.
Den code für diese ist das übliche: Registrieren Sie die SCAN_RESULTS_AVAILABLE_ACTION
und warten auf das Ereignis, in dem Empfänger, wie dieser:
//Register the Receiver in some part os fragment...
getActivity().registerReceiver(wifiListener, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
WifiManager wifiManager = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE);
wifiManager.startScan();
//Inside the receiver:
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
List<ScanResult> results = wifiManager.getScanResults();
//the result.size() is 0 after update to Android v6.0, same code working in older devices.
Suchte ich in der änderungen der API über dieses Thema, aber ich habe' sehen Sie alle aktuellen änderungen für diese Funktionalität.
Hatte jemand bemerken dies? Ist etwas neues in der API oder nur ein Einzelfall?
In
Wifi > Advanced
ich sehe gerade Network Notification
und Keep Wifi...
- Optionen, das Scan-Optionen, die angezeigt wird zwischen diesen beiden scheint Weg zu sein in dieser version.Sehen Sie einen dialog knallen, wenn es erreicht, dass der code für die erste Zeit zu gewähren der Berechtigung für die Ortungsdienste? Ich Wette, in M sehen Sie diesen dialog. Siehe developer.android.com/reference/android/app/..., int)
YEAH! In anderen apps, die ich verwendet, um rufen Sie diesen dialog, um die Kraft, die Standort-Einstellungen aktiviert werden, in der Regel, wenn ich die Arbeit mit Karten, natürlich, dies ist der gleiche Fall verwenden, wenn ich verwenden Speicherort für die Karten und Dinge wie diese, auch nicht mit einer Karte. Der dialog ist nicht automatisch, Sie müssen aufgerufen werden, von den Play-Services-Antwort, machen Sie completelly mich vergessen. Bitte beantworten Sie diese Frage mit diesem particullar Beratung.
hast du das Datum von dieser "Vervielfältigung"? Ich stellte diese Frage bereits 6 Monate vor.
InformationsquelleAutor Deividi Cavarzan | 2015-08-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als von Android 6.0, Berechtigung Verhalten geändert hat zur Laufzeit. Ein feature zu verwenden, erfordert eine Erlaubnis, sollte man erst prüfen, ob die Erlaubnis erteilt wird, zuvor. Mit
checkSelfPermission(permissionString)
Methode ein Ergebnis zurückgegeben wird, welken dort die Erlaubnis istPERMISSION_GRANTED
oderPERMISSION_DENIED
.Wenn die Erlaubnis nicht erteilt oder es ist erste mal, ein Antrag auf Genehmigung gestellt werden soll. Geben Sie einen Benutzer, eine option zu gewähren oder zu verweigern.
Wenn Ihr code läuft auf dem Gerät vor M, gehen Sie mit, Ihrem code, der die Berechtigung erteilt wurde, mit legacy-Methode.
Einmal ersuchte um die Erlaubnis, Dialogfeld angezeigt, in dem Benutzer. Seine/Ihre Antwort wird geliefert als:
Danach können Sie überprüfen, ob die Standort-Dienste AUF, mit
LocationServices.SettingsApi
und fordern den Benutzer zu aktivieren, wenn diese Optionen deaktiviert ist. Dies ist möglich mit Play-DiensteLocationSettingsStatusCodes.RESOLUTION_REQUIRED
Rückruf.IMHO, die überprüfen, ob Lage und WLAN aktiviert sind (und aktivieren) sollte percede die Berechtigung anfordern, um die Funktionen nutzen.
Ich habe versucht mit diesen auf ein virtuelles Gerät, das mit android m das Ergebnis war kein dialog gefragt, für die Erlaubnis, statt onRequestPermission zurückgegeben permission denied sofort
7,5% der Benutzer auf M, bedeutet es, dass der rest der Leute akzeptieren sollte, "access location" Berechtigung, die völlig nutzlos für Sie. Wahrscheinlich wird es zu erschrecken Sie Weg - app, welche noch nie verwendet (und nicht soll) Ort beginnen, Fragen Sie eine zusätzliche Berechtigung. Gibt es eine Möglichkeit hinzufügen die Erlaubnis nur für M?
IMHO dein Kommentar sollte eine separate Frage.
InformationsquelleAutor Nikola Despotoski
Finde ich im Zusammenhang mit Ausgabe im AOSP issue tracker issue Eins hundert fünf und achtzig tausend drei hundert siebzig WifiManager#getScanResults() gibt ein leeres array, Liste, wenn GPS ausgeschaltet ist.
Das problem erwähnt, aus #1, Die mobile open-Ort-service zu erhalten wifi-Liste der mobilen.
Und Von #18, Das Android-Projekt-Mitglied, behauptet, dass die Entwicklungs-team hat das Problem, dass Sie haben berichtet, und es wird in Zukunft bauen.
Die APP ist in der targetSdkVersion 23, Folgen Sie einfach dem obigen Lösung um zu überprüfen, Laufzeit Berechtigung. Durchsetzung zu aktivieren location services-problem wird fix in Android Zukunft release.
vielen Dank für Ihre suggession
Die Ausgabe von code.google.com/p/android/issues/detail?id=185370#c70 Antwort weist darauf hin, dass es scheint, dass noch Android N (preview) hat das gleiche Verhalten, so weit.
Wirklich vielen Dank für eine Antwort. Aber es ist ein lästiges Problem, denn ich hatte bereits gestattet, den Standort zu meiner app, aber mein GPS-Gerät ausgeschaltet ist es immer noch nicht funktionieren. Nun der Fall ist nutzlos, wenn der Benutzer nicht explizit schalten Sie das GPS ein. Ich konnte nicht verstehen, dass das wifi-Scannen ist wirklich nötig, Hilfe von GPS.
Danke, dass Sie so viel Mann, die ich vergeudet habe 1 Tage....Sie sind Gott git für mich, danke so viel +1
InformationsquelleAutor Fantasy Fang
Bearbeiten
So, das problem scheint mit der neuen Erlaubnis Handhabung. Sie haben, um die Erlaubnis zu bitten, bevor Sie den wifi-code. Hier ist ein Beispiel:
Diese Prüfung muss durchgeführt werden in einer Tätigkeit.
Die original-sample-code verfügbar ist hier, modifiziert nach das problem in diesem Thema erörtert.
Original
Laut der verlinkten änderungen der API, muss Ihre Anwendung eine der Standort-Berechtigungen. Zitat:
Beachten Sie auch, dass es eine neues boolean-Schlüssel erhielt von Ihrem BroadcastReceiver auf
SCAN_RESULTS_AVAILABLE_ACTION
Aktion:EXTRA_RESULTS_UPDATED
. Dies wird angezeigt, wenn der scan abgeschlossen ist, und Sie können auf die Ergebnisse durch den AufrufwifiManager.getScanResults()
.<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
beachten Sie, dass es gibt ein neues extra in das bundle erhielt von der BroadcastReceiver: developer.android.com/reference/android/net/wifi/...
Ja, ich nachschlagen, und true zurückgeben, wie erwartet, was darauf hinweist, werden die verfügbaren Netzwerke. Die Wifi-Zustand zurückgegeben werden, ist auch 3,
WIFI_STATE_ENABLED
Wie bereits in den update -
intent.getBooleanExtra("resultsUpdated", false);
gibt in diesem Fall true.ist
onRequestPermissionsResult
entfernt von der AppCompatActivity? Es nicht, diese Methode zu überschreiben, in dieser version...InformationsquelleAutor Gergely Kőrössy
Zusätzlich zu den gegebenen Antworten; Sie können auch
checkSelfPermission
vonContextCompat
zu ermöglichen abwärtskompatibel mit niedrigeren Android-Versionen:InformationsquelleAutor CptSadface
Das wird nicht funktionieren, es sei denn, Sie haben das GPS eingeschaltet. Komisch, aber es ist der einzige Weg, ich hab die Liste der WLAN ' s :-(.
InformationsquelleAutor Robbie