Files
PrinceOfGlory/Assets/代码/PicoSDK/PicoAPI.cs
kridoo 6e91a0c7f0 111
2025-09-15 17:32:08 +08:00

691 lines
18 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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