我正在尝试在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
,我可以检查我是否拥有应用程序管理器的所有权限。
我花了几个小时试图弄清楚如何做到这一点,我被困住了!
有谁知道一个简单的方法吗?
非常感谢你的帮助,
本杰明
答案 0 :(得分:1)
根据Android Doc,setWifiEnabled
将bool
作为参数,而也会返回bool
。
你的第二个代码差不多了。
您获得了正确的参数但未能提供返回类型。您将AndroidJavaObject
作为返回类型而不是bool
。
在第二段代码中,只需将wifiManager.Call<AndroidJavaObject>("setWifiEnabled", false);
替换为wifiManager.Call<bool>("setWifiEnabled", false);
。
这应该有效,假设您已获得您的许可。给你的一个建议是将你的代码放在try catch子句中。如果Android函数调用中的某些内容为null或失败,这将阻止一些奇怪的行为。
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;
}