作风建设 宣讲家网站,哪里可以接做ppt的网站,网站功能提升权限,无锡网络公司官网背景
直播免费视频课程地址#xff1a;https://www.bilibili.com/video/BV1hN4y1R7t2/
在做双屏相关需求开发过程中#xff0c;经常会有对两个屏幕都要求可以正确触摸的场景。但是目前我们模拟器默认创建的双屏其实是没有办法进行触摸的
修改方案1
静态修改方案 使用命令…背景
直播免费视频课程地址https://www.bilibili.com/video/BV1hN4y1R7t2/
在做双屏相关需求开发过程中经常会有对两个屏幕都要求可以正确触摸的场景。但是目前我们模拟器默认创建的双屏其实是没有办法进行触摸的
修改方案1
静态修改方案 使用命令查看display2即副屏的信息情况 adb shell dumpsys display Display 2:mDisplayId2mPhase1mLayerStack2mHasContenttruemDesiredDisplayModeSpecs{baseModeId2 allowGroupSwitchingfalse primaryRefreshRateRange[0 Infinity] appRequestRefreshRateRange[0 Infinity]}mRequestedColorMode0mDisplayOffset(0, 0)mDisplayScalingDisabledfalsemPrimaryDisplayDeviceHDMI ScreenmBaseDisplayInfoDisplayInfo{HDMI Screen, displayId 2, displayGroupId 0, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, FLAG_PRESENTATION, FLAG_TRUSTED, real 1440 x 2960, largest app 1440 x 2960, smallest app 1440 x 2960, appVsyncOff 2000000, presDeadline 75, mode 2, defaultMode 2, modes [{id2, width1440, height2960, fps1.3333333E7, alternativeRefreshRates[]}], hdrCapabilities HdrCapabilities{mSupportedHdrTypes[], mMaxLuminance500.0, mMaxAverageLuminance500.0, mMinLuminance0.0}, userDisabledHdrTypes [], minimalPostProcessingSupported false, rotation 0, state ON, type EXTERNAL, uniqueId local:4619827551948147201, app 1440 x 2960, density 560 (215152.0 x 214811.02) dpi, layerStack 2, colorMode 0, supportedColorModes [0], address {port1, model0x401cecae7d6e8a}, deviceProductInfo DeviceProductInfo{nameEMU_display_1, manufacturerPnpIdGGL, productId4660, modelYearnull, manufactureDateManufactureDate{week12, year2021}, connectionToSinkType0}, removeMode 0, refreshRateOverride 0.0, brightnessMinimum 0.0, brightnessMaximum 1.0, brightnessDefault 0.5, installOrientation ROTATION_0}这里主要看对应的uniqueId “local:4619827551948147201”
然后结合input中需要这个uniqueId更新地方 2: virtio_input_multi_touch_7Classes: TOUCH | TOUCH_MT | SWITCHPath: /dev/input/event8Enabled: trueDescriptor: e1c836c7be888adb29ca6646292e486f96461e97Location: virtio17/input0ControllerNumber: 0UniqueId: Identifier: bus0x0006, vendor0x0000, product0x0000, version0x0000KeyLayoutFile: KeyCharacterMapFile: ConfigurationFile: /vendor/usr/idc/virtio_input_multi_touch_7.idcVideoDevice: none就是这个 ConfigurationFile: /vendor/usr/idc/virtio_input_multi_touch_7.idc
去源码的out路径下修改/aosp/out/target/product/emulator_x86_64/vendor/usr/idc/virtio_input_multi_touch_7.idc 主要把touch.displayId 变成上面的获取的local:4619827551948147201
device.internal 1touch.deviceType touchScreen
touch.orientationAware 1cursor.mode navigation
cursor.orientationAware 1# This displayID matches the unique ID of the virtual display created for Emulator.
# This will indicate to input flinger than it should link this input device
# with the virtual display.
touch.displayId local:4619827551948147201
再进行整体编译即可以
修改方案2
动态修改方案 思路通过调用input中相关方法对config进行相关修改 对应方法如下
即只需要通过这个方法即可以指定触摸的input —》对应显示display进行映射 注意这里使用是port阿不是displayId port也可以通过dumpsys display查看哈 在对应的address有对于的port值一般就是第一个屏幕0第二屏幕1
address {port1, model0x401cecae7d6e8a}, deviceProductInfo DeviceProductInfo{nameEMU_display_1, manufacturerPnpIdGGL, productId4660, modelYearnull, manufactureDateManufactureDate{week12, year2021}确定了了display的port还有一个input相关inputPort参数这个就直接通过dumpsy input获取哈在dumpsys寻找对应屏幕的event从而找到对应的Device 2: virtio_input_multi_touch_7Classes: TOUCH | TOUCH_MT | SWITCHPath: /dev/input/event8Enabled: trueDescriptor: e1c836c7be888adb29ca6646292e486f96461e97Location: virtio17/input0ControllerNumber: 0UniqueId: Identifier: bus0x0006, vendor0x0000, product0x0000, version0x0000KeyLayoutFile: KeyCharacterMapFile: ConfigurationFile: /vendor/usr/idc/virtio_input_multi_touch_7.idcVideoDevice: none
就是这里的 Location: virtio17/input0virtio17/input0就是我们要的
做好一个动态调用触发这里直接也使用dumpsys input命令里面进行
commit 72193cfb966307940457148bedc793c316d67af5 (HEAD)
Author: Your Name youexample.com
Date: Fri Aug 25 17:23:22 2023 0800add displayfortouch modifydiff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java
index 72612a0468cd..587a7b313b8f 100644
--- a/services/core/java/com/android/server/input/InputManagerService.javab/services/core/java/com/android/server/input/InputManagerService.java-2678,6 2678,14 public class InputManagerService extends IInputManager.Stubif (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;pw.println(INPUT MANAGER (dumpsys input)\n);pw.println(INPUT MANAGER args size args.length \n);if (args.length 3 args[0].equals(displayForInput)) {String location args[1];int port Integer.parseInt(args[2]);addPortAssociation(location,port);pw.println(INPUT MANAGER addPortAssociation location location port port \n);return;}String dumpStr mNative.dump();if (dumpStr ! null) {pw.println(dumpStr);
最后使用命令 adb shell dumpsys input displayForInput virtio17/input0 1