多用户多屏显示异常问题

多用户多屏显示异常问题

问题: 多用户并显示多屏时,显示异常,某些activity只显示在default display上面。

情况一:在第二屏第二用户上长按某APP,选择app info,settings的activity会在display 0上显示出来。
情况二:APP里面调用其他activity,也会在默认显示屏上显示出来。
分析:原生android已经支持多用户显示多屏上,但支持还不够完善,比如这里的activity,以及相应的dialog,toast,均会显示在display 0上。

代码分析(情况一):

showAppDetailsAsUser --》startActivityAsUser–》executeRequest

startActivityAsUser中的/* resultTo= */ null,导致后续的executeRequest中的sourceRecord没有初始化,后续的startActivityUnchecked中的display被设置成了default display,也就是display 0

问题解决:

获取调用app的display的info,来设置当前启动activity的display info

在executeRequest中插入
+        int calling_displayID = INVALID_DISPLAY;
+        ActivityRecord callerRecord = null;
+        if(callerApp != null) {
+            callerRecord = callerApp.getConfigActivityRecord();
+            if(callerRecord != null) {
+                calling_displayID = callerRecord.getDisplayId();
+            }
+        }
+        if (calling_displayID != INVALID_DISPLAY && checkedOptions != null){
+           //call from APP property
+            if (calling_displayID != checkedOptions.getCallerDisplayId()) {
+                checkedOptions.setCallerDisplayId(calling_displayID);
+            }
+        } else if (sourceRecord == null) {
+           //call from APP internal
+            sourceRecord = callerRecord;
+        }
+
         mLastStartActivityResult = startActivityUnchecked(r, sourceRecord, voiceSession,
                 request.voiceInteractor, startFlags, true /* doResume */, checkedOptions, inTask,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值