我们一直在使用反射来启用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以来是否真的没有办法实现这一目标?
答案 0 :(得分:-1)
虽然它不是一个合适的解决方案,但如果没有替代方案,你可以尝试一下。
首先:检查HOTSPOT是否激活
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;
}
第二:如果热点处于活动状态,请打开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);
}