Enable/Disable Unity Android 上的 Wifi
Enable/Disable Wifi on Android in Unity
我正在尝试在我的 Android 设备上从 Unity 启用或禁用 Wifi。
我尝试做我在论坛上找到的不同的东西,但没有成功。
如果我这样做:
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
不存在。
如果我这样做:
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
也不是静态函数)。
我的 manifest.xml
已正确合并,我可以检查我是否拥有应用程序管理器的所有权限。
我花了几个小时试图弄清楚如何做到这一点,但我被卡住了!
有人知道这样做的简单方法吗?
非常感谢您的帮助,
本杰明
根据Android Doc,setWifiEnabled
将bool
作为参数,returns bool
也是。
你的第二个代码几乎接近。
您参数设置正确,但未能提供 return 类型。您将 AndroidJavaObject
作为 return 类型而不是 bool
.
在您的第二个代码中,只需将 wifiManager.Call<AndroidJavaObject>("setWifiEnabled", false);
替换为 wifiManager.Call<bool>("setWifiEnabled", false);
。
这应该可行,前提是您已获得许可。给您的一个建议是将您的代码放在 try catch 子句中。如果在您的 Android 函数调用中某些内容为空或失败,这将防止一些奇怪的行为。
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;
}
我正在尝试在我的 Android 设备上从 Unity 启用或禁用 Wifi。 我尝试做我在论坛上找到的不同的东西,但没有成功。
如果我这样做:
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
不存在。
如果我这样做:
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
也不是静态函数)。
我的 manifest.xml
已正确合并,我可以检查我是否拥有应用程序管理器的所有权限。
我花了几个小时试图弄清楚如何做到这一点,但我被卡住了!
有人知道这样做的简单方法吗?
非常感谢您的帮助,
本杰明
根据Android Doc,setWifiEnabled
将bool
作为参数,returns bool
也是。
你的第二个代码几乎接近。
您参数设置正确,但未能提供 return 类型。您将 AndroidJavaObject
作为 return 类型而不是 bool
.
在您的第二个代码中,只需将 wifiManager.Call<AndroidJavaObject>("setWifiEnabled", false);
替换为 wifiManager.Call<bool>("setWifiEnabled", false);
。
这应该可行,前提是您已获得许可。给您的一个建议是将您的代码放在 try catch 子句中。如果在您的 Android 函数调用中某些内容为空或失败,这将防止一些奇怪的行为。
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;
}