web-dev-qa-db-fra.com

Comment activer Android O WiFi Hotspot par programme

Nous avons utilisé l'API WifiManager hidden pour activer le partage de connexion Wi-Fi et créer un point d'accès. Le problème que pose maintenant l'API 26 sur Android est que la balise @RequiresPermission(Android.Manifest.permission.TETHER_PRIVILEGED) a été ajoutée à la fonction setWifiApEnabled et que l'appel maintenant renvoie false et que le journal suivant est imprimé:

W/WifiManager: tentative d'appel de PACKAGE_NAME sur setWifiApEnabled enabled = true

En lisant la nouvelle documentation, il est indiqué que la fonction est obsolète et sera supprimée dans une prochaine version. Utilisez plutôt ConnectivityManager#startTethering si l'appelant dispose des autorisations appropriées, mais cette approche présente le même problème sans autorisations TETHER_PRIVILEGED. Une autre option présentée dans la documentation est l'utilisation de LocalOnlyHotspot, mais cela ne sert à rien au projet, car le point d'accès créé n'a pas de connexion Internet.

J'ai également testé la fonction startSoftAp à partir de l'API masquée, mais aucun résultat n'a été obtenu puisque l'exception suivante est levée:

WifiService: ni l'utilisateur 10164 ni le processus en cours n'ont Android.permission.NETWORK_STACK

Existe-t-il une solution de contournement pour activer un point d'accès Wi-Fi sur les nouvelles API? J'ai également cherché des solutions de rechange au partage de connexion Wi-Fi, mais la seule solution viable semble être le partage de connexion Bluetooth avec l'inconvénient d'obtenir uniquement la vitesse 3G. Wifi Aware et Wifi P2P ont également été pris en compte, mais le problème de la connectivité Internet n'est pas partagé entre les appareils.

Des suggestions sur la façon d'aborder cela?

6
Tiago Ferreira

Non, sous Android O, la sécurité est renforcée. Vous ne pouvez donc pas appeler "startTethering" par réflexion car cela nécessite OnStartTetheringCallback qui est masqué. Par conséquent, vous pouvez utiliser l'API, à moins de compiler un système apk avec Android Build. Vous pouvez utiliser LocalOnlyHotspotCallback si vous voulez

1
Snehashish Agarwal

Cela a été répondu à plusieurs reprises. Comme le dit Snehashish Agarwal, les méthodes setWifiApEnabled () et startThethering () sont des API privées. Ils sont annotés avec @hide, ce qui signifie qu'ils sont privés. Les applications tierces ne doivent pas invoquer directement des API privées. Il n'y a aucune garantie qu'ils fonctionneront à l'avenir. Comme dans votre cas. 

En outre, startLocalOnlyHotspot n'aura pas accès à Internet. C'est un point d'accès local uniquement pour la communication entre les appareils connectés au point d'accès Wifi et cette méthode n'aura pas d'accès à Internet.

Actuellement, il n'y a pas d'appel API officiel permettant d'activer le hotspot mobile.

1
Android4Fun