HoloLens 可以强制执行我的应用程序的单个实例吗?

Can HoloLens enforce a single instance of my app?

在 MSFT HoloLens 上打开 Unity 应用程序时,它首先会创建一个空白框,供用户通过手势定位和放置。用户放置此白框后,应用程序启动。用户可以通过执行 'bloom' 手势退出应用程序(但不一定关闭它)。该应用程序不会 运行 并且前面提到的白框应该重新出现(表示此 'paused' 状态,可以说是在 运行 和关闭之间)。

问题是有时应用程序可能已经退出并且没有出现这个白框。如果白框不存在,则用户无法正常关闭应用程序(通过单击右上角的 X)。同样,如果应用程序已退出并且用户在下次会话时不记得这一点,他们自然会尝试再次启动应用程序。如果上一个会话从未实际关闭,则可能会导致新打开的会话出现问题。

我如何限制 HoloLens 打开我的 Unity 应用程序的第二个实例,前提是之前打开了一个会话并保持 运行 或从未关闭?

理想情况下,如果应用程序已经打开,当用户尝试打开应用程序时,HoloLens 将刷新先前存在的实例并将其带到用户视图或在尝试打开新会话之前强行关闭上一个会话(以避免不良行为)。

在 HoloLens 上强制执行 Unity 应用程序的单个实例是处理此问题的最佳和最可靠方法吗?或者在尝试再次打开应用程序之前检测实例是否打开并关闭该实例?如果有的话,哪个是首选还是取决于首选?

我找到的关于这个主题的外部资源(很多中的一些):
How to determine if app is running on HoloLens - 我找到的关于该主题的最相关信息来源。不幸的是,它没有涉及如何处理应用程序已打开的确认。 Unity Script Reference - WSA (Windows Store app) - 再次没有提到强制执行单个 运行 实例
Unity Script Reference - OnApplicationQuit - 不确定这是否适用于这种情况,但是有一种方法 Unity "sends to all game objects before the application is quit"。

制作中:

    private void App_Resuming(Object sender, Object e)
    {
        if (UnityEngine.VR.VRSettings.loadedDeviceName.Equals("HoloLens"))
        {
            UnityEngine.VR.VRDevice.SetTrackingSpaceType(UnityEngine.VR.TrackingSpaceType.Stationary);
            UnityEngine.VR.InputTracking.Recenter();
            UnityEngine.VR.VRDevice.SetTrackingSpaceType(UnityEngine.VR.TrackingSpaceType.RoomScale);
        }
    }

Initialize 方法中('App.cs' 内部)

    public virtual void Initialize(CoreApplicationView applicationView)

添加

    CoreApplication.Resuming += App_Resuming;

目前无法对此进行测试,因为 Hololens 将连接到网络并吐出 "No internet, connected"(尝试了两个 protected/unprotected 网络)。设备可能需要更新,但我们无法在没有网络连接的情况下检查更新。

为了澄清,这不是一个特定于 hololens 的问题,你需要查看的是 windows 10 sdk,在 windows 8 中它被称为墓碑,它是移动的行为从一个没有关闭并能够恢复的应用程序,这里是一个 link 到一篇关于在 windows 10 应用程序中维护状态的文章,这里的讨论和解释太长了,无法做到公正。

https://visualstudiomagazine.com/articles/2015/09/01/its-universal.aspx

https://docs.microsoft.com/en-us/windows/uwp/launch-resume/app-lifecycle#app-execution-state