在Unity中启用/禁用Android上的Wifi

本文关键字:Android 上的 Wifi 禁用 Unity 启用 | 更新日期: 2023-09-27 18:03:51

我正在尝试在我的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,我可以检查我是否拥有应用程序管理器的所有权限。

我花了几个小时试图弄清楚如何做到这一点,我被困住了!

有谁知道一个简单的方法吗?

非常感谢你的帮助,

便雅悯

在Unity中启用/禁用Android上的Wifi

根据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;
}