我试图在我的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
参数为参数也返回bool
。
您的第二个代码快要结束了。参数正确,但是无法提供返回类型。您将AndroidJavaObject
而不是用作返回类型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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句