gpt4 book ai didi

android - 如何在 Android >= 7.1(包括共享互联网访问)上以编程方式打开 Wifi-Hotspot?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:46:22 25 4
gpt4 key购买 nike

我们一直在使用反射在我们的应用程序中启用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com