我们一直在使用反射在我们的应用程序中启用 Android 中的 wifi 热点(就像其他人一样,看起来):
WifiManager mWifiManager = (WifiManager) this.context.getSystemService(Context.WIFI_SERVICE);
Method method = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
method.invoke(mWifiManager, wifiConfig, enabled);
从 Android 7.1 开始,这不再有效。虽然它启动了热点(我在信息栏中看到了热点图标),但连接的客户端无法使用手机的互联网连接。
对于 Oreo (Android 8.0),情况变得更糟,因为它根本不执行任何操作。
我为仅限本地的热点找到了这个解决方案: How to turn on/off wifi hotspot programatically in Android 8.0 (Oreo) 但是我们需要共享互联网连接,所以我们不能使用这个。
对我们来说,拥有手机的 root 访问权限也不是解决方案。
我们是否错过了任何官方或非官方的方式来实现我们的目标,或者自 Android 7.1 以来真的没有办法做到这一点吗?
最佳答案
虽然这不是一个合适的解决方案,但如果没有其他选择,您可以尝试一下。
首先:检查热点是否激活
boolean isHotSpotActive(Context cxt)
{
boolean isSuccess = false;
WifiManager wifi = (WifiManager)cxt.getSystemService(Context.WIFI_SERVICE);
Method[] wmMethods = wifi.getClass().getDeclaredMethods();
for (Method method : wmMethods)
{
if (method.getName().equals("isWifiApEnabled"))
{
try
{
boolean isWifiApEnabled = (boolean)method.invoke(wifi);
isSuccess = isWifiApEnabled;
}catch (IllegalArgumentException e){
e.printStackTrace();
}catch (IllegalAccessException e){
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
return isSuccess;
}
第二:如果热点处于 Activity 状态,请先打开 Wifi,然后再关闭。
WifiManager wifimanager=(WifiManager)context.getSystemService(Context.WIFI_SERVICE);
boolean isWifiOn = wifimanager.setWifiEnabled(true); // turning wifi on
//will turn off the hotspot
if(isWifiOn)
{
wifimanager.setWifiEnabled(false);
}
关于android - 如何在 Android >= 7.1(包括共享互联网访问)上以编程方式打开 Wifi-Hotspot?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46278186/