【问题标题】:Enable/Disable Wifi on Android in Unity在 Unity 中启用/禁用 Android 上的 Wifi
【发布时间】:2016-08-23 21:58:31
【问题描述】:

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

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

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

非常感谢您的帮助,

本杰明

【问题讨论】:

    标签: c# android unity3d wifi


    【解决方案1】:

    根据Android DocsetWifiEnabledbool作为参数,也返回bool

    您的第二个代码几乎接近。 您获得了正确的参数,但未能提供返回类型。您将AndroidJavaObject 作为返回类型而不是bool

    在您的第二个代码中,只需将 wifiManager.Call&lt;AndroidJavaObject&gt;("setWifiEnabled", false); 替换为 wifiManager.Call&lt;bool&gt;("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;
    }
    

    【讨论】:

    • 权限&lt;uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&gt;&lt;uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /&gt;
    • com.unity3d.player.UnityPlayer,要不要改成Unity中的包名?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2023-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多