PICO企业级开发者API

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

using Unity.XR.PXR;
using UnityEngine;

public class PicoAPI : MonoBehaviour
{
    public static PicoAPI Instance;

    private void Awake()
    {
        if (Instance == null)
            Instance = this;

        PXR_Enterprise.InitEnterpriseService();
        PXR_Enterprise.BindEnterpriseService();

        PXR_Enterprise.InitAudioDevice();
    }
    private void OnDestroy()
    {
        PXR_Enterprise.UnBindEnterpriseService();
    }



    /// <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[] { });
    }
    /// <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 => "无此操作权限",
                _ => "成功",
            };
            //ShowLog($"静默安装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 => "无此操作权限",
                _ => "成功",
            };
            //ShowLog($"静默卸载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_Enterprise.SetCommonBrightness(int.Parse(Ilight.ToString()));
    }
    /// <summary>
    /// 获得亮度
    /// </summary>
    int GetCommonBrightness()
    {
        return PXR_Enterprise.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>
    /// 开启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 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 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);
    }
    #endregion


    #region 设置音量
    /// <summary>
    /// 获取最大音量
    /// </summary>
    public int GetMaxVolumeNumber()
    {
        return PXR_Enterprise.GetMaxVolumeNumber();
    }
    /// <summary>
    /// 获取当前音量
    /// </summary>
    public int GetCurrentVolumeNumber()
    {
        return PXR_Enterprise.GetCurrentVolumeNumber();
    }
    /// <summary>
    /// 增加音量
    /// </summary>
    public void VolumeUp()
    {
        PXR_Enterprise.VolumeUp();
    }
    /// <summary>
    /// 减小音量
    /// </summary>
    public void VolumeDown()
    {
        PXR_Enterprise.VolumeDown();
    }
    /// <summary>
    /// 设置音量
    /// </summary>
    public void SetVolumeNum(int volume)
    {
        PXR_Enterprise.SetVolumeNum(volume);
    }
    /// <summary>
    /// 音量设置到最大值
    /// </summary>
    public void SetVolumeMaxNum()
    {
        SetVolumeNum(GetMaxVolumeNumber());
    }
    #endregion
}

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>
	<!-- 添加读写权限,安卓10版本以上要手动开启所有文件访问权 -->
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
	<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
	<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
	<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
	<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
	<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
	<!-- 添加蓝牙和 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>
**

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

  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

快乐觉主

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

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

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

打赏作者

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

抵扣说明:

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

余额充值