我正试图在我的Android设备上启用或禁用Unity。我试着做我在论坛上发现的不同的事情,但没有成功。
如果我这样做了:
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
,我可以检查我是否拥有应用程序管理器的所有权限。
我花了几个小时想办法解决这个问题,结果我被困住了!
有谁知道这样做的简单方法吗?
非常感谢你的帮助,
本杰明
发布于 2016-08-23 22:26:03
根据Android医生,setWifiEnabled
以bool
作为参数,并返回bool
。
您的第二段代码几乎接近了。参数正确,但未能提供返回类型。您将AndroidJavaObject
作为返回类型而不是bool
。
在第二段代码中,只需将wifiManager.Call<AndroidJavaObject>("setWifiEnabled", false);
替换为wifiManager.Call<bool>("setWifiEnabled", false);
即可。
这应该是可行的,假设你已经得到了你的许可。给您的一个建议是将您的代码放入子句中。如果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;
}
https://stackoverflow.com/questions/39111324
复制