using Unity.XR.PICO.TOBSupport; using Unity.XR.PXR; using UnityEngine; using UnityEngine.XR; public class PicoAPI : MonoBehaviour { public static PicoAPI _Instance; private void Awake() { if (_Instance == null) _Instance = this; PXR_Enterprise.InitEnterpriseService(); PXR_Enterprise.BindEnterpriseService(); } private void OnDestroy() { PXR_Enterprise.UnBindEnterpriseService(); } /// /// 获得WakeLock锁 /// public void AcquireWakeLock() { PXR_Enterprise.AcquireWakeLock(); } /// /// 校正视角 /// public void TryRecenter() { InputDevices.GetDeviceAtXRNode(XRNode.Head).subsystem.TryRecenter();//校正视角 } /// /// 开启投屏 /// public void OpenTouPing() { //AndroidProcessData.OpenPackage(packageNmae, activity); PXR_Enterprise.StartActivity("com.pvr.picocast", "com.pvr.picocast.view.CastMainActivity", "", "", new string[] { }, new int[] { }); } public void OpenApp(string pkgName) { PXR_Enterprise.StartActivity(pkgName, "", "", "", new string[] { }, new int[] { }); } /// /// 开启wifi /// public void OpenWIFI() { PXR_Enterprise.StartVrSettingsItem(StartVRSettingsEnum.START_VR_SETTINGS_ITEM_WIFI, true, 0); } /// /// 开启pico播放器 /// public void PlayPicoVideo(string fileName) { AndroidJavaObject context = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic("currentActivity"); AndroidJavaObject videoPlayer = new AndroidJavaObject("com.picovr.picoplaymanager.PicovrLaunchPlayer"); videoPlayer.Call("uri", fileName, false).Call("playTime", 0).Call("scenes", 2).Call("launchVideoPlayer", context); } /// /// 保持应用程序活跃 /// public void AppKeepAlive(string appPackageName) { PXR_Enterprise.AppKeepAlive(appPackageName, true, 0); } /// /// 设置应用作为启动程序 /// public void SetAppAsHome(string pkgName) { PXR_Enterprise.SetAPPAsHome(SwitchEnum.S_ON, pkgName); } /// /// 设置USB配置模式为MTP /// public void SetUSBConfigMode() { PXR_Enterprise.SwitchSetUsbConfigurationOption(USBConfigModeEnum.MTP); } /// /// 强制退出应用 /// public void KillAppsByPidOrPackageName(string pkgName) { PXR_Enterprise.KillAppsByPidOrPackageName(new int[] { }, new string[] { pkgName }); } /// /// 清除后台应用白名单 /// public void KillBackgroundAppsWithWhiteList(string pkgName) { PXR_Enterprise.KillBackgroundAppsWithWhiteList(new string[] { pkgName }); } /// /// 设置瞳距 /// public void SetIpd(float ipd) { PXR_Enterprise.SetIPD(ipd, CallBack); void CallBack(int code) { string installCode = code switch { 1 => "失败", 2 => "不在有效范围", _ => "成功", }; } } #region 打开关闭重启软件 /// /// 通过包名调用其他软件 /// /// 应用包名 /// AndroidJavaObject public void OpenPackage(string pkgName, AndroidJavaObject activity = null) { if (activity == null) { AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); activity = UnityPlayer.GetStatic("currentActivity"); } using (AndroidJavaObject joPackageManager = activity.Call("getPackageManager")) { using (AndroidJavaObject joIntent = joPackageManager.Call("getLaunchIntentForPackage", pkgName)) { if (null != joIntent) { activity.Call("startActivity", joIntent); } else { Debug.Log("未安装此软件:" + pkgName); } } } } /// /// 是否安装了此app /// public bool IsAppInstalled(string packageName) { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = unityPlayer.GetStatic("currentActivity"); AndroidJavaObject packageManager = currentActivity.Call("getPackageManager"); AndroidJavaObject packageInfo = null; try { packageInfo = packageManager.Call("getPackageInfo", packageName, 0); } catch (AndroidJavaException e) { // Application is not installed } if (packageInfo == null) { return false; } else { return true; } } /// /// 获取apk包名 /// public string GetPackageNameFromApk(string apkFilePath) { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject currentActivity = unityPlayer.GetStatic("currentActivity"); AndroidJavaObject packageManager = currentActivity.Call("getPackageManager"); AndroidJavaObject packageInfo = packageManager.Call("getPackageArchiveInfo", apkFilePath, 0); if (packageInfo != null) { AndroidJavaObject applicationInfo = packageInfo.Get("applicationInfo"); string packageName = applicationInfo.Get("packageName"); return packageName; } return null; } #endregion #region 关闭安全边界 /// /// 关闭边界 /// public void OffBoundary() { PXR_Boundary.SetGuardianSystemDisable(false); } #endregion #region 设置手柄震动 /// /// 设置手柄震动 /// /// 手柄 /// 振幅 /// 持续时间 /// 震动频率 public void SetControllerVibration(PXR_Input.VibrateType vibrateType, float amplitude, int duration, int frequency = 150) { PXR_Input.SendHapticImpulse(vibrateType, amplitude, duration, frequency); } /// /// 获得手柄电量 0是左手柄,1是右手柄 /// /// public int[] GetControllerBattery() { return PXR_Enterprise.GetControllerBattery(); } #endregion #region 静默安装/卸载apk /// /// 静默安装apk /// public void InstallApk(string path) { if (!string.IsNullOrEmpty(path)) { PXR_Enterprise.ControlAPPManager(PackageControlEnum.PACKAGE_SILENCE_INSTALL, path, CallBack); } void CallBack(int code) { string installCode = code switch { 1 => "失败", 2 => "无此操作权限", _ => "成功", }; Debug.Log($"静默安装apk的路径: {path}, code: {installCode}"); } } /// /// 静默卸载app /// public void UnInstallApp(string appPackageName) { PXR_Enterprise.ControlAPPManager(PackageControlEnum.PACKAGE_SILENCE_UNINSTALL, appPackageName, CallBack); void CallBack(int code) { string unInstallCode = code switch { 1 => "失败", 2 => "无此操作权限", _ => "成功", }; Debug.Log($"静默卸载app包名: {appPackageName}, code: {unInstallCode}"); } } #endregion #region 获取设备信息 /// /// pico设备SN /// public string PicoSN() { return StateGetDeviceInfo(SystemInfoEnum.EQUIPMENT_SN); } /// /// pico设备电量 /// public string PicoPower() { return StateGetDeviceInfo(SystemInfoEnum.ELECTRIC_QUANTITY); } /// /// 充电状态 /// /// “2”是充电中,“3”是没充电 public string ChargingStatus() { return StateGetDeviceInfo(SystemInfoEnum.CHARGING_STATUS); } /// /// pico设备WIFI状态 /// public string PicoWIFIState() { return StateGetDeviceInfo(SystemInfoEnum.DEVICE_WIFI_STATUS); } /// /// 获取设备信息 /// string StateGetDeviceInfo(SystemInfoEnum infoEnum) { return PXR_Enterprise.StateGetDeviceInfo(infoEnum); } /// /// 调节亮度 /// void SetCommonBrightness(float Ilight) { PXR_System.SetCommonBrightness(int.Parse(Ilight.ToString())); } /// /// 获得亮度 /// int GetCommonBrightness() { return PXR_System.GetCommonBrightness(); } #endregion #region 控制设备关机或重启 /// /// 控制设备关机或重启 /// void ControlDeviceShutDownOrReboot(DeviceControlEnum deviceControlEnum) { PXR_Enterprise.ControlSetDeviceAction(deviceControlEnum, callback); void callback(int obj) { string Code = obj switch { 1 => "失败", 2 => "无此操作权限", _ => "成功", }; } } /// /// 关机 /// public void ShutDown() { ControlDeviceShutDownOrReboot(DeviceControlEnum.DEVICE_CONTROL_SHUTDOWN); } /// /// 重启 /// public void Reboot() { ControlDeviceShutDownOrReboot(DeviceControlEnum.DEVICE_CONTROL_REBOOT); } #endregion #region 设置Home按钮事件 /// /// 设置home按钮无效 /// public void SetHomeNoAvail() { PropertySetHomeKey(HomeEventEnum.SINGLE_CLICK, HomeFunctionEnum.VALUE_HOME_DISABLE); } /// /// 设置home按钮默认 /// public void RemoveControllerHomeKey() { PXR_Enterprise.RemoveControllerHomeKey(HomeEventEnum.SINGLE_CLICK); } /// /// 设置Home按钮事件 /// public void PropertySetHomeKey(HomeEventEnum eventEnum, HomeFunctionEnum function) { PXR_Enterprise.PropertySetHomeKey(eventEnum, function, callback); void callback(bool obj) { string Code = obj switch { false => "失败", _ => "成功", }; } } #endregion #region 设置设备永不休眠永不息屏 /// /// 设置设备不使用时屏幕关闭的时间 /// void PropertySetScreenOffDelay(ScreenOffDelayTimeEnum timeEnum) { PXR_Enterprise.PropertySetScreenOffDelay(timeEnum, callback); void callback(int obj) { string Code = obj switch { 0 => "成功", 2 => "失败", 10 => "应小于系统休眠时间", _ => "异常" }; } } /// /// 设置设备不使用时系统休眠时间 /// void PropertySetSleepDelay(SleepDelayTimeEnum timeEnum) { PXR_Enterprise.PropertySetSleepDelay(timeEnum); } /// /// 设置设备永不休眠永不息屏 /// public void NeverSleepScreenOff() { PropertySetSleepDelay(SleepDelayTimeEnum.NEVER);//永不休眠 PropertySetScreenOffDelay(ScreenOffDelayTimeEnum.NEVER);//永不息屏 } #endregion #region 打开/关闭指定的系统功能 /// /// 打开/关闭指定的系统功能 /// void SwitchSystemFunction(SystemFunctionSwitchEnum systemFunctionSwitchEnum, SwitchEnum switchEnum) { PXR_Enterprise.SwitchSystemFunction(systemFunctionSwitchEnum, switchEnum); } /// /// 手势重定位开关 /// public void HandRecenter() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_GESTURE_RECOGNITION_RESET_ENABLE, SwitchEnum.S_OFF); } public void OpenHandRecenter() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_GESTURE_RECOGNITION_RESET_ENABLE, SwitchEnum.S_ON); } /// /// 手势Home /// public void HandHome() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_GESTURE_RECOGNITION_HOME_ENABLE, SwitchEnum.S_OFF); } public void OpenHandHome() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_GESTURE_RECOGNITION_HOME_ENABLE, SwitchEnum.S_ON); } /// /// 开启USB调试 /// public void OnUSBDebugging() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_USB, SwitchEnum.S_ON); } /// /// 关闭自动休眠 /// public void OffAutoSleep() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_AUTOSLEEP, SwitchEnum.S_OFF); } /// /// 关闭系统升级 /// public void OffSystemUpdate() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_SYSTEM_UPDATE, SwitchEnum.S_OFF); } /// /// 打开系统升级 /// public void OpenSystemUpdate() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_SYSTEM_UPDATE, SwitchEnum.S_ON); } /// /// 关闭自动杀后台VR应用 /// public void OffKillVRapp() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_BASIC_SETTING_KILL_BACKGROUND_VR_APP, SwitchEnum.S_OFF); } /// /// 开启自动杀后台VR应用 /// public void OpenKillVRapp() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_BASIC_SETTING_KILL_BACKGROUND_VR_APP, SwitchEnum.S_ON); } /// /// 关闭导航栏 /// public void OffNavgation() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_NAVGATION_SWITCH, SwitchEnum.S_OFF); } /// /// 打开导航栏 /// public void OpenNavgation() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_NAVGATION_SWITCH, SwitchEnum.S_ON); } /// /// 设备休眠或关闭时保持网络连接 /// public void OnPowerCtrlWIFIEnable() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_POWER_CTRL_WIFI_ENABLE, SwitchEnum.S_ON); } /// /// 关闭系统软件升级 /// public void OffSystemUpdateApp() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_SYSTEM_UPDATE_APP, SwitchEnum.S_OFF); } /// /// 打开系统软件升级 /// public void OpenSystemUpdateApp() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_SYSTEM_UPDATE_APP, SwitchEnum.S_ON); } /// /// 关闭应用程序退出对话框 /// public void OffAppQuitConfirmDialog() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_BASIC_SETTING_SHOW_APP_QUIT_CONFIRM_DIALOG, SwitchEnum.S_OFF); } /// /// 打开应用程序退出对话框 /// public void OpenAppQuitConfirmDialog() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_BASIC_SETTING_SHOW_APP_QUIT_CONFIRM_DIALOG, SwitchEnum.S_ON); } /// /// 关闭6DoF位置跟踪 /// public void OffSixDof() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_SIX_DOF_SWITCH, SwitchEnum.S_OFF); } public void OnSixDof() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_SIX_DOF_SWITCH, SwitchEnum.S_ON); } /// /// 隐藏投屏按钮 /// public void OffCastUI() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_SHORTCUT_SHOW_CAST_UI, SwitchEnum.S_OFF); } /// /// VR应用中实时响应头戴返回键 /// public void HMDBackKey() { //头戴返回键按下发出DOWN事件,抬起发出UP事件 SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_REAL_TIME_RESPONSE_HMD_BACK_KEY_IN_VR_APP, SwitchEnum.S_ON); } #endregion #region 设置音量 /// /// 获取最大音量 /// public int GetMaxVolumeNumber() { return PXR_System.GetMaxVolumeNumber(); } /// /// 获取当前音量 /// public int GetCurrentVolumeNumber() { return PXR_System.GetCurrentVolumeNumber(); } /// /// 增加音量 /// public void VolumeUp() { PXR_System.VolumeUp(); } /// /// 减小音量 /// public void VolumeDown() { PXR_System.VolumeDown(); } /// /// 设置音量 /// public void SetVolumeNum(int volume) { PXR_System.SetVolumeNum(volume); } /// /// 音量设置到最大值 /// public void SetVolumeMaxNum() { SetVolumeNum(GetMaxVolumeNumber()); } #endregion #region 投屏设置 /// /// 投屏地址 /// public string GetCastUrl() { PXR_Enterprise.PICOCastInit(null); return PXR_Enterprise.PICOCastGetUrl(PICOCastUrlTypeEnum.NO_CONFIRM_URL); } /// /// 屏幕录制授权总是允许 /// public void PICOCastSetShowAuthorization() { PXR_Enterprise.PICOCastSetShowAuthorization(1); } /// /// 隐藏投屏时蓝色图标 /// public void OffCastNotification() { SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_BASIC_SETTING_SHOW_CAST_NOTIFICATION, SwitchEnum.S_OFF); } /// /// 投屏设置-开启声音录制 /// public void CastOption() { PICOCastSetOption(PICOCastOptionOrStatusEnum.OPTION_AUDIO_ENABLE, PICOCastOptionValueEnum.OPTION_VALUE_AUDIO_ON); } /// /// 投屏设置 /// void PICOCastSetOption(PICOCastOptionOrStatusEnum castOptionOrStatus, PICOCastOptionValueEnum castOptionValue) { PXR_Enterprise.PICOCastSetOption(castOptionOrStatus, castOptionValue); } #endregion }