如何通过编程启用Android O WiFi热点

8
我们一直在使用WifiManager隐藏API来启用Wifi共享和创建访问点。但是,现在在Android的API 26上,标签@RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED)被添加到setWifiApEnabled函数中,导致调用返回false并打印以下日志:
W/WifiManager: PACKAGE_NAME attempted call to setWifiApEnabled enabled = true 阅读新文档,发现该函数已被弃用,并将在即将发布的版本中删除。如果调用者具有适当的权限,则应改为使用ConnectivityManager#startTethering,但这种方法也存在无TETHER_PRIVILEGED权限的问题。文档提供的另一个选择是使用LocalOnlyHotspot,但对于该项目而言,此热点没有Internet连接。
我还尝试了使用隐藏API的startSoftAp函数,但没有成功结果,因为会抛出以下异常:
WifiService: Neither user 10164 nor current process has android.permission.NETWORK_STACK
是否有任何解决办法来激活新API上的Wifi热点?我还搜索了Wifi共享的替代方案,但唯一可行的替代方案似乎是蓝牙共享,缺点是只能获得3G速度。 Wifi Aware和Wifi P2P也被考虑过,但它们的问题是设备之间不共享Internet连接。
您对如何解决这个问题有什么建议吗?

https://dev59.com/pFcO5IYBdhLWcg3wVAE0 - Mark
可能是重复的问题:如何在Android 8.0(Oreo)中以编程方式打开/关闭WiFi热点 - tripleee
2个回答

4
这个问题已经被回答了很多次。正如Snehashish Agarwal所说,setWifiApEnabled()和startThethering()方法是私有APIs。它们被注释为@hide,这意味着它们是私有的。第三方应用程序不应直接调用私有APIs。不能保证它们在未来会起作用。就像在您的情况下一样。
另外,startLocalOnlyHotspot将没有Internet访问权限。它是一个本地热点,用于在连接到Wifi热点的设备之间进行通信,但此方法将无法访问Internet。
目前,没有官方的API调用可以启用移动热点。

2
不,Android O 增加了安全性,所以现在无法通过反射调用 "startTethering",因为它需要 OnStartTetheringCallback,而该回调是隐藏的。除非你使用 Android 构建编译系统 apk,否则你可以使用 API。如果需要,可以使用 LocalOnlyHotspotCallback。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接