2017-09-18 4 views
6

Wir haben die WifiManager versteckte API verwendet, um WLAN-Tethering zu aktivieren und einen Access Point zu erstellen. Das Problem ist jetzt mit API 26 auf Android ist, dass der Tag-@RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) zum setWifiApEnabled Funktion hinzugefügt wurde und nun, da Aufruf false zurückgibt und die folgenden Protokoll gedruckt wird:So aktivieren Sie Android O WiFi Hotspot programmgesteuert

W/WifiManager: PACKAGE_NAME versuchten Anruf setWifiApEnabled aktiviert = true

die neue Dokumentation Lesen, sagt es, dass die Funktion ist veraltet und wird in einer zukünftigen Version entfernt werden und stattdessen ConnectivityManager#startTethering zu verwenden, wenn der Anrufer entsprechende Berechtigung hat, aber dieser Ansatz hat das gleiche Problem ohne TETHER_PRIVILEGED Berechtigungen. Eine weitere Option in der Dokumentation ist die Verwendung von LocalOnlyHotspot, aber dies ist für das Projekt nicht nützlich, da der erstellte Hotspot keine Internetverbindung hat.

Ich habe auch mit der startSoftAp Funktion von der versteckten API aber ohne erfolgreiche Ergebnisse, da die folgende Ausnahme ausgelöst getestet:

WifiService: Weder Benutzer 10164 noch laufender Prozess hat android.permission.NETWORK_STACK

Gibt es eine Problemumgehung, um einen Wifi-Hotspot auf neueren APIs zu aktivieren? Ich habe auch nach Alternativen zum WLAN-Tethering gesucht, aber die einzige praktikable Alternative scheint Bluetooth-Tethering mit dem Nachteil zu sein, nur 3G-Geschwindigkeit. Wifi Aware und Wifi P2P wurden ebenfalls berücksichtigt, aber diese haben das Problem, dass die Internetverbindung nicht zwischen den Geräten geteilt wird.

Irgendwelche Vorschläge zur Vorgehensweise?

+0

[https://stackoverflow.com/questions/45984345/how-to-turn-on-off-wifi-hotspot-programatical-in-android-8-0-oreo](https://stackoverflow.com/Fragen/45984345/How-to-Turn-on-WLAN-Hotspot-programmatically-in-android-8-0-oreo) – Mark

+0

Mögliche Duplikat von [Wie WLAN-Hotspot programmatisch in Android 8.0 (Oreo)] (https://stackoverflow.com/questions/45984345/how-to-turn-on-off-wifi-hotspot-programatically-in-android-8-0-oreo) – tripleee

Antwort

1

Nein, in Android O haben sie erhöhte Sicherheit, So können Sie jetzt nicht "startTethering" über Reflektion aufrufen, da es OnStartTetheringCallback benötigt, die ausgeblendet ist, so dass Sie die API verwenden können, wenn Sie eine Systemapk mit Android Build kompilieren. Sie können LocalOnlyHotspotCallback verwenden, wenn Sie möchten

2

Dies wurde oft beantwortet. Wie Snehashish Agarwal sagte, sind die Methoden setWifiApEnabled() und startTheringing() private APIs. Sie sind mit @hide versehen, was bedeutet, dass sie privat sind. Anwendungen von Drittanbietern sollten private APIs nicht direkt aufrufen. Es gibt keine Garantie, dass sie in Zukunft funktionieren werden. Wie in deinem Fall.

Auch startLocalOnlyHotspot wird nicht den Internetzugang haben. Es ist ein lokaler Hotspot für die Kommunikation zwischen Geräten, die mit dem WLAN-Hotspot verbunden sind. Diese Methode hat keinen Internetzugang.

Derzeit gibt es keinen offiziellen API-Aufruf zum Aktivieren des mobilen Hotspots.

Verwandte Themen