如何以编程方式启用Android O WiFi Hotspot

时间:2017-09-18 17:17:21

标签: android android-wifi android-networking hotspot

我们一直在使用 WifiManager 隐藏API启用Wifi网络共享并创建接入点。 Android上API 26的问题是标签@RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED)已添加到setWifiApEnabled函数中,现在该调用返回false并打印以下日志:

  

W / WifiManager:PACKAGE_NAME尝试调用setWifiApEnabled enabled = true

阅读新文档时,它表示该函数已弃用,将在即将发布的版本中删除,如果调用者具有适当的权限,则使用ConnectivityManager#startTethering,但此方法在没有TETHER_PRIVILEGED权限的情况下存在同样的问题。文档中提供的另一个选项是LocalOnlyHotspot的使用,但这对项目没用,因为创建的热点没有Internet连接。

我还使用隐藏API中的startSoftAp函数进行了测试,但由于引发了以下异常,因此没有成功的结果:

  

WifiService:用户10164和当前进程都没有android.permission.NETWORK_STACK

是否有任何解决方法可以在较新的API上激活Wifi热点?我也搜索了Wifi网络共享的替代方案,但唯一可行的选择似乎是蓝牙网络共享,只有获得3G速度的缺点。还考虑了Wifi Aware和Wifi P2P,但这些都存在设备之间无法共享互联网连接的问题。

有关如何处理此事的任何建议?

2 个答案:

答案 0 :(得分:1)

No, In Android O they have increased security, So now you cannot call "startTethering" via reflection as it requires OnStartTetheringCallback which is hidden, so unless you compile a system apk with android build you can use the API. You can use LocalOnlyHotspotCallback if you want

答案 1 :(得分:1)

这已被多次回答。正如Snehashish Agarwal所说,setWifiApEnabled()和startThethering()方法都是私有API。它们用@hide注释,这意味着它们是私有的。第三方应用程序不应直接调用私有API。无法保证它们将来会有效。就像你的情况一样。

此外,startLocalOnlyHotspot将无法访问互联网。它是连接到Wifi热点的设备之间进行通信的本地唯一热点,此方法无法访问Internet。

目前,没有正式的API调用来启用移动热点。