开发平台基本信息
芯片: SDM450 版本: Android 9.0 kernel: msm-4.9
问题描述
公司有一款设备,作为收银机,需要实现双屏异显、双屏异触的功能。双屏异显功能,Android原生就支持,所以对应系统层来说,基本没有什么工作量,主要是应用跟驱动;双屏异触的话就需要额外添加。
解决方法
双屏异显
驱动怎么实现双屏异显的,我就不太清楚了;应用层的话,Android源码中有提供一个ApiDemo,把那个apk编译出来跑一下,看看效果,然后找到相应的代码就可以愉快的玩耍了,源码路径development\samples\ApiDemos 。
其实就是用Presentation这个控件,它继承于Dialog,简单点理解,双屏异显,其实就是在副屏显示出一个弹框,然后,在弹框内允许操作;但是,这种方式有很多局限性;比如说,只能副屏显示或者两个屏幕都显示,不可以做到副屏显示系统,主屏显示弹框。
只是我写的一个demo,仅供参考:
Android 9.0 双屏异显Demo
双屏异触
diff --git a/services/inputflinger/EventHub.cpp b/services/inputflinger/EventHub.cpp
old mode 100644
new mode 100755
index 4d9a2a0..6c9c0a9
--- a/services/inputflinger/EventHub.cpp
+++ b/services/inputflinger/EventHub.cpp
@@ -1521,6 +1521,11 @@ status_t EventHub::loadKeyMapLocked(Device* device) {
}
bool EventHub::isExternalDeviceLocked(Device* device) {
+ const char *DEVICE_NAME ="GSL_TP_SECOND";
+ if(strcmp(device->identifier.name.string(),DEVICE_NAME)==0){
+ ALOGE("touch device id:%d set primary device",device->id);
+ return true;
+ }
if (device->configuration) {
bool value;
if (device->configuration->tryGetProperty(String8("device.internal"), value)) {
延伸扩展
在这款收银机上调试双屏异显之后稳定出货了,然后,突然遇到在另一款消费机上,同样是双屏异显,代码一致,但是却出现异显的时候,副屏显示内容是竖屏的,居中显示;对比了两款机器硬件上的区别;
- 收银机两个屏幕都是竖屏横用的
- 消费机主屏是横屏横用,副屏是竖屏横用
于是,问题就很明显了,肯定是副屏角度没有旋转过来,抓日志也可以清楚看到,副屏的宽高比是竖屏的。所以,修改一下副屏显示,把宽高调换过来即可。
--- a/services/core/java/com/android/server/display/LogicalDisplay.java
+++ b/services/core/java/com/android/server/display/LogicalDisplay.java
@@ -27,6 +27,7 @@ import java.io.PrintWriter;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
+import android.os.Build;
注:这里还是通过型号判断,特定设备才调换宽高,其他设备正常
|