using UnityEngine; /// /// Android权限管理器 /// 处理Android平台所需的各种权限 /// public static class AndroidPermissionManager { #if UNITY_ANDROID && !UNITY_EDITOR /// /// 检查是否有写入系统设置的权限 /// public static bool HasWriteSettingsPermission() { try { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = unityPlayer.GetStatic("currentActivity"); AndroidJavaClass settingsClass = new AndroidJavaClass("android.provider.Settings$System"); bool canWrite = settingsClass.CallStatic("canWrite", currentActivity); return canWrite; } catch (System.Exception ex) { Debug.LogError($"检查写入设置权限失败: {ex.Message}"); return false; } } /// /// 请求写入系统设置权限 /// public static void RequestWriteSettingsPermission() { try { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = unityPlayer.GetStatic("currentActivity"); AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent"); AndroidJavaObject intent = new AndroidJavaObject("android.content.Intent"); // 设置Action为管理写入设置 intent.Call("setAction", "android.settings.action.MANAGE_WRITE_SETTINGS"); // 设置数据URI AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri"); AndroidJavaObject uri = uriClass.CallStatic("parse", "package:" + GetPackageName()); intent.Call("setData", uri); currentActivity.Call("startActivity", intent); Debug.Log("已请求写入设置权限,请在系统设置中授权"); } catch (System.Exception ex) { Debug.LogError($"请求写入设置权限失败: {ex.Message}"); } } /// /// 检查是否有访问网络状态权限 /// public static bool HasNetworkStatePermission() { try { return HasPermission("android.permission.ACCESS_NETWORK_STATE"); } catch (System.Exception ex) { Debug.LogError($"检查网络状态权限失败: {ex.Message}"); return false; } } /// /// 检查是否有访问WiFi状态权限 /// public static bool HasWifiStatePermission() { try { return HasPermission("android.permission.ACCESS_WIFI_STATE"); } catch (System.Exception ex) { Debug.LogError($"检查WiFi状态权限失败: {ex.Message}"); return false; } } /// /// 检查是否有改变WiFi状态权限 /// public static bool HasChangeWifiStatePermission() { try { return HasPermission("android.permission.CHANGE_WIFI_STATE"); } catch (System.Exception ex) { Debug.LogError($"检查WiFi控制权限失败: {ex.Message}"); return false; } } /// /// 请求运行时权限 /// public static void RequestPermissions(string[] permissions) { try { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = unityPlayer.GetStatic("currentActivity"); currentActivity.Call("requestPermissions", permissions, 1001); Debug.Log($"已请求权限: {string.Join(", ", permissions)}"); } catch (System.Exception ex) { Debug.LogError($"请求权限失败: {ex.Message}"); } } /// /// 检查指定权限 /// private static bool HasPermission(string permission) { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = unityPlayer.GetStatic("currentActivity"); int result = currentActivity.Call("checkSelfPermission", permission); // PackageManager.PERMISSION_GRANTED = 0 return result == 0; } /// /// 获取应用包名 /// private static string GetPackageName() { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = unityPlayer.GetStatic("currentActivity"); return currentActivity.Call("getPackageName"); } /// /// 初始化必要权限检查 /// public static void InitializePermissions() { Debug.Log("=== Android权限检查 ==="); bool writeSettings = HasWriteSettingsPermission(); bool networkState = HasNetworkStatePermission(); bool wifiState = HasWifiStatePermission(); bool changeWifiState = HasChangeWifiStatePermission(); Debug.Log($"写入设置权限: {writeSettings}"); Debug.Log($"网络状态权限: {networkState}"); Debug.Log($"WiFi状态权限: {wifiState}"); Debug.Log($"WiFi控制权限: {changeWifiState}"); // 如果缺少关键权限,给出提示 if (!writeSettings) { Debug.LogWarning("缺少写入设置权限,亮度控制可能无法正常工作"); } if (!networkState || !wifiState) { Debug.LogWarning("缺少网络相关权限,网络功能可能受限"); } } #else // 非Android平台的空实现 public static bool HasWriteSettingsPermission() => true; public static void RequestWriteSettingsPermission() => Debug.Log("[非Android] 无需权限"); public static bool HasNetworkStatePermission() => true; public static bool HasWifiStatePermission() => true; public static bool HasChangeWifiStatePermission() => true; public static void RequestPermissions(string[] permissions) => Debug.Log("[非Android] 无需权限"); public static void InitializePermissions() => Debug.Log("[非Android] 权限检查跳过"); #endif }