PICO企业级开发者API

目前自己已经使用过的API,记录一下,持续更新
目前picosdk版本305

using System;
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)
        {
            Destroy(gameObject);
            return;
        }
        _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>
    /// 打开app
    /// </summary>
    public void OpenApp(string pkgname)
    {
        PXR_Enterprise.StartActivity(pkgname, "", "", "", new string[] { }, new int[] { });
    }
    /// <summary>
    /// 开启投屏
    /// </summary>
    public void OpenTouPing()
    {
        //AndroidProcessData.OpenPackage(packageNmae, activity);
        PXR_Enterprise.StartActivity("com.pvr.picocast", "com.pvr.picocast.view.CastMainActivity", "", "", 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)
        {
            try
            {
                string installCode = code switch
                {
                    1 => "失败",
                    2 => "不在有效范围",
                    _ => "成功",
                };
                Debug.Log($"设置瞳距: {installCode}");
            }
            catch (Exception e)
            {
                Debug.LogError($"设置瞳距异常: {e.Message}");
            }

        }
    }

    #region 打开关闭重启软件
    /// <summary>
    /// 通过包名调用其他软件
    /// </summary>
    /// <param name="pkgName">应用包名</param>
    /// <param name="activity">AndroidJavaObject</param>
    public void OpenPackage(string pkgName, AndroidJavaObject activity = null)
    {

        if (activity == null)
        {
            using (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)
    {
        try
        {
            using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
            {
                using (AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
                {
                    using (AndroidJavaObject packageManager = currentActivity.Call<AndroidJavaObject>("getPackageManager"))
                    {
                        AndroidJavaObject packageInfo = null;
                        try
                        {
                            packageInfo = packageManager.Call<AndroidJavaObject>("getPackageInfo", packageName, 0);
                        }
                        catch (AndroidJavaException e)
                        {
                            // Application is not installed
                        }

                        return packageInfo != null;
                    }
                }
            }
        }
        catch (Exception e)
        {
            Debug.LogError($"检查应用是否安装时发生异常: {e.Message}");
            return false;
        }
    }
    /// <summary>
    /// 获取apk包名
    /// </summary>
    public string GetPackageNameFromApk(string apkFilePath)
    {
        using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
        {
            using (AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
            {
                using (AndroidJavaObject packageManager = currentActivity.Call<AndroidJavaObject>("getPackageManager"))
                {
                    using (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)
        {
            try
            {
                string installCode = code switch
                {
                    1 => "失败",
                    2 => "无此操作权限",
                    _ => "成功",
                };
                Debug.Log($"静默安装apk的路径: {installCode}");
            }
            catch (Exception e)
            {
                Debug.LogError($"静默安装apk时出现异常: {e.Message}");
            }

        }
    }
    /// <summary>
    /// 静默卸载app
    /// </summary>
    public void UnInstallApp(string appPackageName)
    {
        PXR_Enterprise.ControlAPPManager(PackageControlEnum.PACKAGE_SILENCE_UNINSTALL, appPackageName, CallBack);
        void CallBack(int code)
        {
            try
            {
                string unInstallCode = code switch
                {
                    1 => "失败",
                    2 => "无此操作权限",
                    _ => "成功",
                };
                Debug.Log($"静默卸载app包名: {unInstallCode}");
            }
            catch (Exception e)
            {
                Debug.LogError($"静默卸载apk时出现异常: {e.Message}");
            }

        }
    }
    #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)
        {
            try
            {
                string Code = obj switch
                {
                    1 => "失败",
                    2 => "无此操作权限",
                    _ => "成功",
                };
                Debug.Log($"控制设备关机或重启: {Code}");
            }
            catch (Exception e)
            {
                Debug.LogError($"控制设备关机或重启时出现异常: {e.Message}");
            }

        }
    }
    /// <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)
        {
            try
            {
                string Code = obj switch
                {
                    false => "失败",
                    _ => "成功",
                };
                Debug.Log($"设置Home按钮事件: {Code}");
            }
            catch (Exception e)
            {
                Debug.LogError($"设置Home按钮事件时出现异常: {e.Message}");
            }

        }
    }
    #endregion


    #region 设置设备永不休眠永不息屏
    /// <summary>
    /// 设置设备不使用时屏幕关闭的时间
    /// </summary>
    void PropertySetScreenOffDelay(ScreenOffDelayTimeEnum timeEnum)
    {
        PXR_Enterprise.PropertySetScreenOffDelay(timeEnum, callback);
        void callback(int obj)
        {
            try
            {
                string Code = obj switch
                {
                    0 => "成功",
                    2 => "失败",
                    10 => "应小于系统休眠时间",
                    _ => "异常"
                };
                Debug.Log($"设置设备不使用时屏幕关闭的时间: {Code}");

            }
            catch (Exception e)
            {
                Debug.LogError($"设置设备不使用时屏幕关闭的时间时出现异常: {e.Message}");
            }

        }
    }
    /// <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);
    }
    /// <summary>
    /// 手势Home
    /// </summary>
    public void HandHome()
    {
        SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_GESTURE_RECOGNITION_HOME_ENABLE, SwitchEnum.S_OFF);
    }
    /// <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>
    /// 关闭自动杀后台VR应用
    /// </summary>
    public void OffKillVRapp()
    {
        SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_BASIC_SETTING_KILL_BACKGROUND_VR_APP, SwitchEnum.S_OFF);
    }
    /// <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 OffSeethroughMode()
    {
        SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_QUICK_SEETHROUGH_MODE, SwitchEnum.S_OFF);
    }
    public void OnSeethroughMode()
    {
        SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_QUICK_SEETHROUGH_MODE, 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 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>
    /// 关闭音量UI
    /// </summary>
    public void OffOnVolumeUI()
    {
        SwitchSystemFunction(SystemFunctionSwitchEnum.SFS_VOLUME_UI, SwitchEnum.S_OFF);
    }
    #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

    /// <summary>
    /// 投屏地址
    /// </summary>
    public string GetCastUrl()
    {
        PXR_Enterprise.PICOCastInit(null);
        return PXR_Enterprise.PICOCastGetUrl(PICOCastUrlTypeEnum.NO_CONFIRM_URL);
    }
}



pico用到过的权限

**<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unity3d.player"
    xmlns:tools="http://schemas.android.com/tools">
    <application>
        <activity android:name="com.unity3d.player.UnityPlayerActivity"
                  android:theme="@style/UnityThemeSelector">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
		</activity>
		<!-- 添加PICO高风险接口权限:有静默安装卸载,关机重启,杀死应用,清理后台应用,Rom离线升级 -->
		<meta-data android:name="pico_advance_interface" android:value="0"/>
	</application>
	<!-- 添加读写权限 -->
	<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
	<!-- 添加蓝牙和 BLE 权限 -->
	<uses-feature android:name="android.hardware.bluetooth_le" android:required="false"/>
	<uses-permission android:name="android.permission.BLUETOOTH"/>
	<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
	<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
	<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
</manifest>
**

安卓读写权限问题请看我的这篇文章

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐教主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值