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
}