首页 文章

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

提问于
浏览
0

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

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

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

非常感谢你的帮助,

本杰明

1 回答

  • 1

    根据Android DocsetWifiEnabledbool 作为参数并返回 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;
    }
    

相关问题