在Unity中启用/禁用Android上的Wifi

我试图在我的Android设备上启用或禁用Unity的Wifi。 我试图做我在论坛上发现的不同的事情,但没有成功。

如果我做:

using(var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { string wifiServiceName = unityPlayer.Get("WIFI_SERVICE"); using(var wifiManager = unityPlayer.Call("getSystemService", wifiServiceName)) { wifiManager.Call("setWifiEnabled", false); } } 

我有一个错误,说WIFI_SERVICE不存在。

如果我做:

 using (AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic("currentActivity")) { using (var wifiManager = activity.Call("getSystemService","wifi")) { wifiManager.Call("setWifiEnabled", false); } } 

我有一个错误,说setWifiEnabled不是一个函数,(如果我做CallStatic ,也不是静态函数)。

我正确地合并了manifest.xml ,我可以检查我是否拥有应用程序管理器的所有权限。

我花了几个小时试图弄清楚如何做到这一点,我被卡住了!

有谁知道一个简单的方法吗?

非常感谢你的帮助,

本杰明

根据Android Doc , setWifiEnabledbool作为参数并返回bool

你的第二个代码差不多了。 您获得了正确的参数但未能提供返回类型。 你把AndroidJavaObject作为返回类型而不是bool

在你的第二个代码中,只需替换wifiManager.Call("setWifiEnabled", false); with wifiManager.Call("setWifiEnabled", false);

这应该有效,假设您已获得您的许可。 给你的一个建议是将你的代码放在try catch子句中。 如果Android函数调用中的某些内容为null或失败,这将阻止一些奇怪的行为。

 public bool setWifiEnabled(bool enabled) { using (AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic("currentActivity")) { try { using (var wifiManager = activity.Call("getSystemService", "wifi")) { return wifiManager.Call("setWifiEnabled", enabled); } } catch (Exception e) { } } return false; } public bool isWifiEnabled() { using (AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic("currentActivity")) { try { using (var wifiManager = activity.Call("getSystemService", "wifi")) { return wifiManager.Call("isWifiEnabled"); } } catch (Exception e) { } } return false; }