using System; using System.Collections; using System.Collections.Generic; using Kill.Bluetooth; using Kill.Core; using Kill.Managers; using Kill.UI.Components; using UnityEngine; using UnityEngine.UI; namespace Kill.UI.Pages { public class SetWifiPage : MonoBehaviour { public InputField ssidInput; public InputField passwordInput; public Button confirmButton; public Button backButton; Action callback; public void Init(Action wifiInfoCallback) { callback = wifiInfoCallback; UIManager.Instance.RegisterBackAction(Back); backButton.onClick.RemoveAllListeners(); backButton.onClick.AddListener(Back); confirmButton.onClick.RemoveAllListeners(); confirmButton.onClick.AddListener(OnWifiConfirmClick); string wifiName = GetCurrentWiFiName(); ssidInput.text = wifiName ?? ""; passwordInput.text = ""; CheckWifiNameAndPassword(); ssidInput.onEndEdit.RemoveAllListeners(); ssidInput.onEndEdit.AddListener(delegate { CheckWifiNameAndPassword(); }); passwordInput.onEndEdit.RemoveAllListeners(); passwordInput.onEndEdit.AddListener(delegate { CheckWifiNameAndPassword(); }); } public void Back() { UIManager.Instance.RegisterBackAction(GetComponentInParent().Back); Destroy(gameObject); } public void CheckWifiNameAndPassword() { string ssid = ssidInput.text.Trim(); string password = passwordInput.text; if (string.IsNullOrEmpty(ssid) || string.IsNullOrEmpty(password)) { confirmButton.gameObject.SetActive(false); } else { confirmButton.gameObject.SetActive(true); } } /// /// 确认配置 WiFi /// public void OnWifiConfirmClick() { // WiFi模式下不支持设置WiFi if (DataManager.Instance.hasWifi && !DataManager.Instance.hasBluetooth) { ToastUI.Show("100293"); return; } string ssid = ssidInput.text.Trim(); string password = passwordInput.text; if (string.IsNullOrEmpty(ssid)) { ToastUI.ShowText(LanguageManager.Instance.GetLanguage("100082") ?? "请输入WiFi名称"); return; } // 创建 WiFi 配置 var wifiControl = new Bluetooth.Protocol.WIFIControl { Enable = true, SSID = ssid, Password = password }; LoadingUI.Show(); // 发送 WiFi 配置到设备 BLECommunicationManager.Instance.WriteWIFIControl(wifiControl, (success) => { Loom.QueueOnMainThread(() => { LoadingUI.Hide(); if (success) { ToastUI.ShowText(LanguageManager.Instance.GetLanguage("100222") ?? "WiFi配置成功"); Back(); callback?.Invoke(ssid); } else { ToastUI.ShowText(LanguageManager.Instance.GetLanguage("100083") ?? "WiFi配置失败"); } }); }); } /// /// 获取当前连接的 WiFi 名称 /// private string GetCurrentWiFiName() { #if UNITY_ANDROID && !UNITY_EDITOR try { using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) using (AndroidJavaObject currentActivity = unityPlayer.GetStatic("currentActivity")) using (AndroidJavaObject wifiManager = currentActivity.Call("getSystemService", "wifi")) { if (wifiManager == null) return null; using (AndroidJavaObject wifiInfo = wifiManager.Call("getConnectionInfo")) { if (wifiInfo == null) return null; string ssid = wifiInfo.Call("getSSID"); if (!string.IsNullOrEmpty(ssid) && ssid != "") { return ssid.Trim('"'); } } } } catch (System.Exception ex) { Debug.LogError($"获取 WiFi 名称失败: {ex.Message}"); } return null; #elif UNITY_IOS && !UNITY_EDITOR // iOS 调用原生插件 return GetWiFiNameIOS(); #else return "Editor_WiFi"; // 编辑器返回模拟值 #endif } #if UNITY_IOS && !UNITY_EDITOR [System.Runtime.InteropServices.DllImport("__Internal")] private static extern System.IntPtr GetWiFiSSID(); /// /// iOS 获取 WiFi 名称 /// private string GetWiFiNameIOS() { try { System.IntPtr ptr = GetWiFiSSID(); if (ptr == System.IntPtr.Zero) { return null; } string ssid = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(ptr); // 释放内存 System.Runtime.InteropServices.Marshal.FreeHGlobal(ptr); return ssid; } catch (System.Exception ex) { Debug.LogError($"iOS 获取 WiFi 名称失败: {ex.Message}"); return null; } } #endif } }