在 Unity 中启用/禁用 Android 上的 Wifi [英] Enable/Disable Wifi on Android in Unity

查看:42
本文介绍了在 Unity 中启用/禁用 Android 上的 Wifi的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在我的 Android 设备上启用或禁用来自 Unity 的 Wifi.我试图做我在论坛上发现的不同的事情,但没有成功.

I am trying to enable or disable Wifi from Unity on my Android device. I tried to do the different things I found on the forum without success.

如果我这样做:

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 不存在.

I have an error saying that WIFI_SERVICE doesn't exist.

如果我这样做:

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,也不是一个静态函数).

I have an error saying that setWifiEnabled is not a function, (nor a static function if I do CallStatic).

我的 manifest.xml 已正确合并,我可以检查我是否拥有应用程序管理器的所有权限.

I have my manifest.xml correctly merged, I can check that I have all the permissions on the application manager.

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

I spent few hours trying to figure out how to do that and I am stuck!

有人知道这样做的简单方法吗?

Does anyone know a simple way to do so?

非常感谢您的帮助,

本杰明

推荐答案

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

According to Android Doc, setWifiEnabled takes bool as parameter and returns bool too.

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

Your second code is almost close. You got the parameter right but failed to provide the return type. You put AndroidJavaObject as the return type instead of bool.

在您的第二个代码中,只需将 wifiManager.Call("setWifiEnabled", false); 替换为 wifiManager.Call("setWifiEnabled", false);.

In your second code, simply replace wifiManager.Call<AndroidJavaObject>("setWifiEnabled", false); with wifiManager.Call<bool>("setWifiEnabled", false);.

这应该可行,前提是您已获得许可.给您的一个建议是将您的代码放在 try catch 子句中.如果 Android 函数调用中的某些内容为 null 或失败,这将防止出现一些奇怪的行为.

This should work, assuming that you have your permission in place. One advice to you is to put your code in a try catch clause. This will prevent some weird behavior if something is null or failed in your Android function calls.

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

这篇关于在 Unity 中启用/禁用 Android 上的 Wifi的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆