UWP锁、解屏后无法响应操作

UWP的Unity项目,在PC上运行时,如果锁屏(手动或自动)再解锁,游戏画面和进度正常,但是无法进行鼠标、键盘或手柄的操作。这Bug在很多线上的Unity项目中存在。

原因:UWP App的系统事件触发有Bug。

在App的窗口被隐藏、切换到后台状况下,Window.Current.CoreWindow.Activated事件会被触发,参数中有bool值来表明当前主窗口是否是激活状态,只有激活状态的窗口才可以接受鼠标键盘灯信息;

经过测试,正常的切换和切回操作,该状态会成对(激活、非激活)触发,

同时成对触发的,还有Window.Current.CoreWindow.VisibilityChanged 事件

下图为触发时的log

,可以看出触发的顺序还有 2X2 =4个事件

但是在屏幕锁屏再解锁的操作过程中,只有VisibilityChanged成对触发,Activated事件并没能成对触发

下图为触发时的Log

,可以看出,缺失了一次Activated激活事件。

但并不意味着此时的主窗口是非激活状态的,因为当手动调用窗口的Acitve()方法时,并没有收到Activated事件,且此时,窗口上的原生UI是可以接受鼠标、键盘的输入的。

所以,仅仅是因为操作系统少发了一次系统事件,而这个事件会被Unity捕获,来判断窗口状态

Unity初始化的时候通过这句代码来获取所有的CoreWindow的事件并响应。

解决办法:

因为VisibilityChanged事件可以被正常触发,所以在该事件中,通知Unity,我们的窗口已经是激活的了。

获取并处理VisibilityChanged事件

同过在HelloWorld和Crossy Road项目中测试,已经解决了这个问题。

sOUTHeR.

时间: 2024-10-01 00:31:54

UWP锁、解屏后无法响应操作的相关文章

【Android】如何实现Android程序在手机锁屏后继续运行

最近笔者在做一个功能,就是实现Android程序在锁屏后可以继续运行,笔者在网上查了一些资料,现在整理出来,希望能够对你有所帮助. 1.如何监听屏幕锁屏 监听屏幕锁屏可以通过如下方式来实现,直接通过代码来判定,或通过监听器来实现 1)通过代码来判定屏幕的锁屏状态 可以通过PowerManager的isScreenOn方法,代码如下: PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);

实现:编辑短信,按power键锁屏后,再点亮屏幕,进入的还是编辑短信界面,按返回键才会进入解锁界面。

描述:在编辑短信界面按电源键锁屏后,重新按电源键点亮屏幕,并没有进入到锁屏界面而是在编辑短信界面,此时短信界面悬浮与锁屏界面之上,这时按返回键关闭编辑短信界面,回到锁屏界面,是如何实现的呢,只需要在需要实现该功能的界面(Activity)中的onCreate()方法中setContentView()方法之前添加以下代码: // set this flag so this activity will stay in front of the keyguard int flags = WindowM

WEB认证苹果手机锁屏后出现断开WI-Fi的现象和解决

苹果当手机使用WEB认证时,手机锁屏解锁后,WIFI将断开,用户将离线.是什么导致这个问题? 现象分析: 苹果当手机连接到WEB认证的WIFI时,苹果手机会发送WIFI连接检测请求,无线控制器在拦截检测请求后重定向到认证页面.这个过程苹果会认为这个WIFI是一个受监管的WIFI. 从苹果手机端,用户在连接WIFI后会自动弹出认证页面进行WEB认证.用户锁定苹果电话后,苹果系统将自动检测WIFI流量,因为锁定屏幕上没有流量,加上苹果认为这是一个受监管的WIFI,因此它将自动断开与WIFI的连接.

Cookie 详解以及实现一个 cookie 操作库

Cookie 详解以及实现一个 cookie 操作库 cookie 在前端有着大量的应用,但有时我们对它还是一知半解.下面来看看它的一些具体的用法 Set-Cookie 服务器通过设置响应头来设置客户端的 cookie,形如: Set-Cookie: <cookie名>=<cookie值> 可以同时添加多个 Set-Cookie,从而设置多个 cookie 的值. Set-Cookie 有几个可选项: Expires/Max-Age Expires/Max-Age 可以设置过期时间

Atom快速进入全屏后隐藏/恢复显示菜单栏

今天用ATOM进入全屏模式,然后偶尔琢磨这个Atom 1.3.2版本的软件的时候, 在菜单栏里面的View里面, 有一个Toggle Menu Bar的选项,好奇的我点击了下,瞬间,菜单栏就不见了.. 经过一番琢磨,终于想到了方法,其实就是通过键盘的快捷键啦. 注:虽然我用的是atom 1.3.2版本的软件,但是原理是一样的.工具/原料 Atom软件,键盘,鼠标,电脑 方法/步骤 首先,当然是打开ATOM软件啦,进入全屏怎么进?按下键盘上面的快捷键F11是最好的. Atom快速进入全屏后隐藏/恢

Redis详解:sets数据类型及操作

set是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作,操作中key理解为集合的名字. 系列文章: Redis详解:strings数据类型及操作 Redis详解:hashes数据类型及操作 Redis详解:lists数据类型及操作 Redis的set是string类型的无序集合.set元素最大可以包含(2的32次方)个元素. set的是通过hash table实现的,所以添加.删除和查找的复杂度都是O(1).hash table会随着添加或者删除自动的调

关于倒计时在关屏后不准确的问题

问题描述: 在写一个考试系统,其中用到了倒计时的功能,发现在锁屏后,倒计时不准确的问题 解决方法: 1.因为是考试系统,所以考试时间是一定的,我们的考试时间是90分钟 2.在进入考试页面时首先获取当前时间,也就是考试开始时间 3.通过考试开始时间计算出考试结束时间 4.每次倒计时的时间为   考试结束时间-当前时间 这样就不会因为关屏后倒计时变慢而影响倒计时的准确性了 还有一个方法就是获取服务器的时间,可以几秒从服务器获取次时间,但是感觉频繁的调用接口获取时间并不是一个很好的方法 原文地址:ht

U-Mail邮件系统切换IP地址后该如何操作?

问:新安装的U-Mail邮件系统,已能正常运行.因与老系统切换,需要改变安装有U-Mail邮件系统软件的 服务器IP地址,我试了一下,只简单地修改服务器的IP地址后还不能正常使用,在浏览器上只能看到IIS的画面,请问还有那些地方需要修改. 我记得安装U-Mail邮件系统时是需要填写IP地址的,要是变更服务器的IP地址不会要我重新安装U-Mail吧. 答: 1.如果只是更换服务器本机的IP.公网IP没有改变. 只需要找到IIS 管理器--- u-mail的webmail网站,右键属性,点击网站--

完美解决Android使用Zxing扫描二维码改成竖屏后,后面的预览画面出现了拉伸,扭曲的情况

完美解决解决Android使用Zxing扫描二维码改成竖屏后,后面的预览画面出现了拉伸,扭曲的情况 第一步:找到com.zxing.camera包下的CameraConfigurationManager.java文件中的void initFromCameraParameters(Camera camera)方法 第二步:在 Log.d(TAG, "Screen resolution: " + screenResolution);后加上如下的代码 Point screenResoluti