在 Unity 中启用/禁用 Android 上的 Wifi [英] Enable/Disable Wifi on Android in Unity
问题描述
我正在尝试在我的 Android 设备上启用或禁用来自 Unity 的 Wifi.我试图做我在论坛上发现的不同的事情,但没有成功.
I am trying to enable or disable Wifi from Unity on my Android device. I tried to do the different things I found on the forum without success.
如果我这样做:
using(var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
string wifiServiceName = unityPlayer.Get<string>("WIFI_SERVICE");
using(var wifiManager = unityPlayer.Call<AndroidJavaObject>("getSystemService", wifiServiceName))
{
wifiManager.Call("setWifiEnabled", false);
}
}
我有一个错误提示 WIFI_SERVICE
不存在.
I have an error saying that WIFI_SERVICE
doesn't exist.
如果我这样做:
using (AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity"))
{
using (var wifiManager = activity.Call<AndroidJavaObject>("getSystemService","wifi"))
{
wifiManager.Call<AndroidJavaObject>("setWifiEnabled", false);
}
}
我有一个错误说 setWifiEnabled
不是一个函数,(如果我执行 CallStatic
,也不是一个静态函数).
I have an error saying that setWifiEnabled
is not a function, (nor a static function if I do CallStatic
).
我的 manifest.xml
已正确合并,我可以检查我是否拥有应用程序管理器的所有权限.
I have my manifest.xml
correctly merged, I can check that I have all the permissions on the application manager.
我花了几个小时试图弄清楚如何做到这一点,但我被卡住了!
I spent few hours trying to figure out how to do that and I am stuck!
有人知道这样做的简单方法吗?
Does anyone know a simple way to do so?
非常感谢您的帮助,
本杰明
推荐答案
根据Android Doc,setWifiEnabled
以bool
作为参数,返回bool
According to Android Doc, setWifiEnabled
takes bool
as parameter and returns bool
too.
你的第二个代码几乎接近了.您的参数正确,但未能提供返回类型.您将 AndroidJavaObject
作为返回类型而不是 bool
.
Your second code is almost close.
You got the parameter right but failed to provide the return type. You put AndroidJavaObject
as the return type instead of bool
.
在您的第二个代码中,只需将 wifiManager.Call
替换为 wifiManager.Call
In your second code, simply replace wifiManager.Call<AndroidJavaObject>("setWifiEnabled", false);
with wifiManager.Call<bool>("setWifiEnabled", false);
.
这应该可行,前提是您已获得许可.给您的一个建议是将您的代码放在 try catch 子句中.如果 Android 函数调用中的某些内容为 null 或失败,这将防止出现一些奇怪的行为.
This should work, assuming that you have your permission in place. One advice to you is to put your code in a try catch clause. This will prevent some weird behavior if something is null or failed in your Android function calls.
public bool setWifiEnabled(bool enabled)
{
using (AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity"))
{
try
{
using (var wifiManager = activity.Call<AndroidJavaObject>("getSystemService", "wifi"))
{
return wifiManager.Call<bool>("setWifiEnabled", enabled);
}
}
catch (Exception e)
{
}
}
return false;
}
public bool isWifiEnabled()
{
using (AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity"))
{
try
{
using (var wifiManager = activity.Call<AndroidJavaObject>("getSystemService", "wifi"))
{
return wifiManager.Call<bool>("isWifiEnabled");
}
}
catch (Exception e)
{
}
}
return false;
}
这篇关于在 Unity 中启用/禁用 Android 上的 Wifi的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!