一种车载设备反向控制安卓移动终端的处理方法及系统与流程

文档序号:15444814发布日期:2018-09-14 23:14阅读:559来源:国知局
本发明涉及移动互联领域,更具体地说,涉及一种车载设备反向控制安卓移动终端的处理方法及系统。
背景技术
:koteiuserinputbackcontrol简称kuibc,是为了解决移动互联领域中的手机与车机连接时的反向控制(车机控制手机)而开发设计出来的一种实现方法。kuibc直接所属领域为移动互联领域,是android平台下车机互联中反向控制的一种实现方案,在车机互联中,反向控制是必不可少的需求之一,反向控制对于用户体验的重要性不言而喻。在目前可实现kuibc的技术中有三种主要实现方式:1)instrumation方式:在android提供的原生api中使用instrumation在android层实现对鼠标、touch等事件的模拟。instrumation是android提供的一个测试工具,它针对android的环境,扩展了业内标准的junit测试框架,instrumentation框架可以控制和测试应用程序。对于反向控制而言,可以直接调用android提供的api下的instrumation中的sendpointersync(keycode),sendkeydownupsync(key),sendcharactersync(keycode)等函数,实现事件模拟,从而实现kuibc。此种容易实现,coding轻松,但是instrumation属于应用级的测试工具,所以在模拟系统事件时,instrumation的执行线程必须保持在当前活动状态,当属于他的线程活动界面退出到后台时,会发生异常中断;另外如果有系统弹框提示弹出时,车载机端也是无法控制,所以使用该方式的作用域局限性很大。2)uinput桥接方式:使用uinput桥接方式,通过jni方式在c层实现向设备节点中写数据而达到模拟手机触摸事件的效果。uinput桥接的方式,是通过用户自己注册挂载自定义的设备节点在系统中,然后通过对这个设备节点的操作达到向系统发送鼠标、touch等事件的数据,不需要人为去写驱动,使用android自带的驱动以用户态向/dev/input/eventnote写入事件,即用户向kernel注入数据。此种方式代码规范性高,适配性强,但需要设备拥有root权限,这往往是用户不能接受的。3)runtimeprocess方式:直接使用系统的提供的runtime线程去执行adb指令。通过process线程去加载runtime.getruntime().exec(command)运行时,写入所需数据。此种容易实现,coding轻松卡顿以及延时严重,用户体验相当糟糕。以上的三种方案分别在不同场景下实现了对手机触摸事件的模拟与控制,而对于车机互联方案来说存在一定的局限性和不足之处,难以满足客户需求。技术实现要素:本发明要解决的技术问题在于,针对现有技术中上述三种方案的局限性和不足之处,提供一种车载设备反向控制安卓移动终端的处理方法及系统,以实现车机互联的反向控制功能,解决手机root权限问题,并成功解决反向控制性能问题,解决延时问题,提高流畅,实现友好的用户体验。本发明为解决其技术问题,提供了一种车载设备反向控制安卓移动终端的处理方法,包括如下步骤:s1、建立车载设备与安卓移动终端的通信连接;s2、在车载设备配置adb后,执行相关的adb指令获取安卓移动终端的参数信息,所述参数信息包括屏幕相关参数以及移动终端对应的inputevent节点;s3、车载设备推送一可执行程序以及一服务程序到安卓移动终端,并且在推送完成后在车载设备中通过adb指令启动二者,在启动所述可执行程序时,车载设备通过所述可执行程序向安卓移动终端传送input节点参数,并控制安卓移动终端打开该节点参数对应的节点文件;s4、安卓移动终端中所述可执行程序以及所述服务程序启动后,所述可执行程序以及一服务程序之间建立sock连接,等待车载设备数据的输入;s5、所述服务程序接收到所述车载设备的数据后转发数据到所述可执行程序,所述可执行程序接收到数据后根据手机系统的touch数据上报格式及参数写入控制数据到所述节点文件中,实现对手机系统的控制。优选地,在本发明的车载设备反向控制安卓移动终端的处理方法中,在步骤s3中:在启动所述可执行程序时,车载设备还通过所述可执行程序向安卓移动终端传送车载设备获取到的与其连接的安卓移动终端的型号,根据该型号做设备的适配,对于不同的安卓移动设备型号或者品牌采用相应的格式进行touch数据的上报。优选地,在本发明的车载设备反向控制安卓移动终端的处理方法中,所述步骤s5中所述车载设备的数据是指根据所述屏幕相关参数信息进行同屏转换后的数据,同屏转换包括:对坐标系的调整以及每个点的坐标进行处理,保持每个点的宽、高都同比缩放,具体根据公式计算得出:aspect_x=width_p/width_c;aspect_y=height_p/height_c;x=aspect_x*event.getx();y=aspect_y*event.gety();式中,aspect_x、aspect_y均为预设的比例系数,width_p、height_p分别为安卓移动终端的屏幕宽度和高度,width_c、height_c分别为要在车载设备的屏幕上图像显示区域的宽度和高度;event.getx()、event.gety()分别为获取的车载设备的屏幕上图像显示点的横坐标和纵坐标,x、y分别为计算所得的转换至安卓移动终端上所对应的横坐标和纵坐标。优选地,在本发明的车载设备反向控制安卓移动终端的处理方法中,所述步骤s3中所述可执行程序向安卓移动终端传送节点参数,并控制安卓移动终端打开该节点参数对应的节点文件具体为:通过adb指令向所述可执行程序传送节点参数eventnote,并控制安卓移动终端打开/dev/input/eventnote这个节点文件;所述步骤s5可执行程序接收到数据后根据手机系统的touch数据上报格式及参数写入控制数据到所述节点文件中具体为:所述可执行程序接收到数据后根据手机系统的touch数据上报格式及参数调用系统write函数写控制数据到/dev/input/eventnote所述节点文件中。优选地,在本发明的车载设备反向控制安卓移动终端的处理方法中,在车载设备反向控制安卓移动终端时,车载设备配置了adb,adb运行以识别安卓移动终端,从而与安卓移动终端之间进行基于adb-adbd通信模式。根据本发明的另一方面,本发明为解决其技术问题,还提供了一种车载设备反向控制安卓移动终端的处理系统,包括如下步骤:通信建立模块,用于建立车载设备与安卓移动终端的通信连接;信息获取模块,用于在车载设备配置adb后,执行相关的adb指令获取安卓移动终端的参数信息,所述参数信息包括屏幕相关参数以及移动终端对应的inputevent节点;程序写入模块,用于车载设备推送一可执行程序以及一服务程序到安卓移动终端,并且在推送完成后在在车载设备中通过adb指令启动二者,在启动所述可执行程序时,车载设备通过所述可执行程序向安卓移动终端传送input节点参数,并控制安卓移动终端打开该节点参数对应的节点文件;等待执行模块,用于安卓移动终端中所述可执行程序以及所述服务程序启动后,所述可执行程序以及一服务程序之间建立sock连接,等待车载设备数据的输入;数据写入模块,用于所述服务程序接收到所述车载设备的数据后转发数据到所述可执行程序,所述可执行程序接收到数据后根据手机系统的touch数据上报格式及参数写入控制数据到所述节点文件中,实现对手机系统的控制。优选地,在本发明的车载设备反向控制安卓移动终端的处理系统中,在程序写入模块中:在启动所述可执行程序时,车载设备还通过所述可执行程序向安卓移动终端传送车载设备获取到的与其连接的安卓移动终端的型号,根据该型号做设备的适配,对于不同的安卓移动设备型号或者品牌采用相应的格式进行touch数据的上报。优选地,在本发明的车载设备反向控制安卓移动终端的处理系统中,所述数据写入模块中所述车载设备的数据是指根据所述屏幕相关参数信息进行同屏转换后的数据,同屏转换包括:对每个点的坐标进行处理,保持每个点的宽、高都同比缩放,具体根据公式计算得出:aspect_x=width_p/width_c;aspect_y=height_p/height_c;x=aspect_x*event.getx();y=aspect_y*event.gety();式中,aspect_x、aspect_y均为预设的比例系数,width_p、height_p分别为安卓移动终端的屏幕宽度和高度,width_c、height_c分别为要在车载设备的屏幕上图像显示区域的宽度和高度;event.getx()、event.gety()分别为获取的车载设备的屏幕上图像显示点的横坐标和纵坐标,x、y分别为计算所得的转换至安卓移动终端上所对应的横坐标和纵坐标。优选地,在本发明的车载设备反向控制安卓移动终端的处理系统中,所述通信建立模块中通信连接是指车载设备与安卓移动终端之间通过usb连接方式、wifi连接方式、蓝牙连接方式中的其中一种方式建立通信连接。优选地,在本发明的车载设备反向控制安卓移动终端的处理系统中,在车载设备反向控制安卓移动终端时,车载设备配置了adb,adb运行以识别安卓移动终端,从而与安卓移动终端之间进行基于adb-adbd通信模式。实施本发明的车载设备反向控制安卓移动终端的处理方法及系统,具有以下有益效果:实现车机互联的反向控制功能,绕过对用户手机的root权限申请问题,成功解决反向控制性能问题,解决延时问题,提高流畅,实现友好的用户体验。附图说明下面将结合附图及实施例对本发明作进一步说明,附图中:图1是本发明的车载设备反向控制安卓移动终端的处理方法一优选实施例的原理图;图2是本发明的车载设备反向控制安卓移动终端的处理方法的信号流向图;图3是本发明的车载设备反向控制安卓移动终端的adbc/s连接逻辑图;图4是本发明的车载设备反向控制安卓移动终端的坐标适配图。具体实施方式为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图详细说明本发明的具体实施方式。本实施例设计的实现方案包括手机(安卓移动终端),车机(车载设备)以及把二者连接为一体的媒介(usb,wifi,蓝牙等)。在本发明设计实现中车机负责收集用户对车机的动作事件,组装用户触发事件的数据;安卓移动终端则负责接受车载设备发过来的数据,并同步响应该用户动作;媒介则作为中间桥梁,负责为数据的传输提供传输通道。在手机与车机进行有效连接后,车机端需要获取手机相关信息,包括屏幕相关参数信息、touch-screen的inputevent节点,屏幕相关参数信息包括像素尺寸以及横竖屏等,优选地所述手机相关信息还包括设备类型等。通过屏幕相关参数信息实现手机车机之间的同屏坐标系转换,转换前根据屏幕相关参数信息建立手机、车机之间的屏幕之间的相互映射关系,该相互映射关系是指屏幕上相同位置上对应像素间的映射关系。在车机端做用户对车机的操作数据收集工作,这就有别与当前其他技术在车机端直接运行指令实现对手机系统进行控制的实现。而该方案的提出是为了解决在手机上的root权限问题,需要绕开root权限问题,因为不能对用户手机进行root请求或者设置,不管从安全性来说还是用户体验上来讲要求用户对程序使用root权限那将是不可想象和无法获得认可和理解的需求。本发明完美绕开该问题,通过调研分析adb实现原理而借鉴adbd对设备权限的分配等,实现无需申请用户开放root权限即可实现反向控制功能。在车机端通过数据读取并且筛选出手机系统的input系统触控节点,在手机车机建立连接后,车机端通过adb方式启动执行程序并打开手机该event节点,手机端则等待车机端数据,在收到车机端数据后同步响应该用户动作。而由于打开的是手机系统的input节点完美利用手机本身的input事件处理模块,解决数据延时和延时累加问题,并且在代码编写以及实现上更加标准化。本发明方案的关键点在于打开手机系统的input节点/dev/input/eventnote文件节点,而打开这个文件需要使用open(event,o_rdwr)函数,执行该函数打开手机系统event节点需要root权限才可以写数据,如何拥有root权限成为本方案的关键难题。如图1、图2所示,本发明方案的具体方案为:s1、建立车载设备与安卓移动终端的通信连接,车载设备获取安卓移动终端的显示画面并进行显示。s2、车载设备配置adb开机自启动:adb源码目录xxx/system/core/adb。在车载设备(如车载android设备)配置adb后,执行相关的adb指令获取安卓移动终端(手机)参数信息,安卓移动终端(手机)参数信息包括安卓移动终端(手机)的屏幕参数、event节点、手机型号等。在车机端使用指令“adbshellgetevent-p”获取安卓移动终端(手机)event节点信息,编写算法对信息进行筛选后确认设备节点,如该设备的触屏节点为/dev/input/event1。s3、在车载设备初始化完成后推送应用程序kylininput跟服务程序touchinputservice程序到安卓移动终端,并且在车载设备推送完成后在车载设备中通过adb指令启动二者,在此的关键部分在启动执行kylininputc语言可执行程序时,传入手机型号、设备touch节点两个参数(phonetype,eventnote),并且打开/dev/input/eventnote这个节点文件;phonetype用来进行安卓移动终端的适配,对于不同的安卓移动设备型号或者品牌后续将采用相应的格式进行touch数据的上报。这是该方案实现的关键之处,打开/dev/input/eventnote文件节点需要root权限,而本方案成功绕开该权限问题。s4、安卓移动终端应用程序kylininput跟服务程序touchinputservice启动后,二者会建立sock连接,等待车载设备数据的输入。s5、服务程序touchinputservice接收到车载设备数据后转发用户数据到可执行应用程序kylininput,可执行应用程序kylininput接收到数据后根据手机系统的touch数据上报格式及参数调用系统write函数写控制数据到/dev/input/eventnote节点文件中,实现对手机系统的控制。其中上述各/dev/input/eventnote中的eventnote为动态的,通过对eventnote进行参数的赋值,可以得到要打开的节点文件。安卓移动终端的android系统提供了供远端调试用的adbd进程。pc电脑之所以能够连接手机对手机进行调试,关键技术就在于在手机端有adbd的存在,而在pc端是adb,adb包括了adbclient跟adbservice,adbserver作为adbclient的车载设备,而位于手机端的adbd又作为adbservice的车载设备存在,为两端的连接通信提供服务。二者关系图3如下所示:adbd源码位于system/core/adb/目录下,可执行文件位于/sbin/adbd。通过adb执行ps命令,结果可以看出adbd本身权限为shell,而它的父进程权限为root。因此本发明在其父进程中的init.rc文件中对其进行配置,使其拥有root权限。android使用sendevent/getevent模拟触屏事件,这两个命令的源码在system/core/toolbox/下,sendevent.cgetevent.c。(1)getevent使用getevent获得/dev/input/eventnote设备汇报的事件,执行这个命令将会输出所有event设备的基本信息,如下:adddevice1:/dev/input/event1name:"mxc_ts"adddevice2:/dev/input/event0name:"mxckpd"表明系统有两个event设备,分别对应着input设备touchscreen,keyboard。(2)sendeventandroid可以使用sendevent来模拟触屏,键盘以及其他类型的event事件,sendevent/dev/input/eventnotetypecodevalue,其中/dev/input/eventnote对应一个event设备,可以通过getevent获得可用的event设备,type,code,value的定义可参看kernel/include/linux/input.h。type如下定义:eventtypesvalue#defineev_key0x01#defineev_rel0x02#defineev_abs0x03#defineev_msc0x04#defineev_sw0x05#defineev_led0x11#defineev_snd0x12#defineev_rep0x14#defineev_ff0x15#defineev_pwr0x16#defineev_ff_status0x17#defineev_max0x1f#defineev_cnt(ev_max+1)一般来说,常用的是ev_key,ev_rel,ev_abs,ev_syn分别对应keyboard,相对坐标,绝对坐标,同步事件。ev_rel对应的code:ev_abs对应的code使用示例:用senevent模拟触屏事件sendevent/dev/input/event1:000300000000015e//absx坐标sendevent/dev/input/event1:00030001000000df//absy坐标sendevent/dev/input/event1:0001014a00000001//btntouch事件值为1sendevent/dev/input/event1:0003001800000000//abspressure事件sendevent/dev/input/event1:0001014a00000000//btntouch事件值为0sendevent/dev/input/event1:0000000000000000//sync事件可以直接使用runtime.getruntime().exec(command)来执行这些语句,但是执行效果不佳,因此在kuibc中不直接使用命令的方式,而是采用打开文件节点,来向系统写文件方式,在采用这种方式的时候,需要把对应的十六进制数据转化成十进制数据这样安卓移动终端的android系统才能识别响应。基于上面两点,第一点解决了权限问题,第二点利用android系统的事件上报处理系统进行对触屏事件及动作的模拟,达到对手机的反向控制。本发明旨在车机互联领域,进一步探讨了uibc反向控制的实现方案,丰富了该领域的技术实现方式。在经济方面,kuibc的实现可以配套其他模块转换成经济效益,在车机互联的前端、后装市场可发挥其经济价值。在技术方面,kuibc实现了模拟手机的触屏系统向手机input事件节点中写数据,成功解决了root权限一大关键难题。在数据、性能方面,达到快速同步及时响应用户动作,解决了延时、卡顿等不友好的用户体验问题。整个过程所需的响应时长在100ms以内。本方案具体实现方式为在c层打开设备节点(open(eventnode,o_rdwr)),使用写文件的方式实现事件模拟。kuibc反向控制使用流程step1获取对端安卓移动终端(手机)相关信息确认车载设备(车机)adb连接success,成功识别安卓移动终端设备(手机)→执行命令adbdevices获取安卓移动终端(手机)尺寸(如:720x1280)→执行命令adbshelldumpsyswindowpolicy,根据结果筛选出所需结果获取安卓移动终端(手机)型号→执行命令adbshellgetpropro.product.model获取eventnote(要写入的设备节点号)→执行命令adbshellgetevent-p,筛选得到touch所属设备号step2:根据获取到的安卓移动终端(手机)尺寸,适屏处理,设定车载设备(车机)的显示尺寸。通过第一步获取了phone的屏幕尺寸宽度width,高度height,而实际应用中车载设备(车机)的宽度width_c,高度height_c是常量(可知的),因此需要选定二者之一来为算法的实际计算提供标准数据来动态计算另一个数据。设安卓移动终端(手机)像素比例为coefficient,则coefficient=width/height而要达到客户度(手机)跟车载设备(车机)的坐标点同步,必须满足coefficient一致,也就是说coefficient=width_p/height_p=width_c/height_c那么width_c=coefficient*height_c=(width_p/height_p)*height_c注:公式中width_p/height_p为安卓移动终端(手机phone)的宽/高;width_c/height_c为车载设备(车机car)的宽/高参数。到此满足了server端(车机)跟client端(手机)像素的同步,保证车载设备与安卓移动终端的坐标系一致。对于坐标系的换算见图4所示,其中asp_x跟asp_y是根据手机的尺寸与车机的尺寸不同而计算出来的比例值,会根据车机端的显示界面具体是按照width或者height作为依据而有所区别。step3:监听server端触发的事件,组装数据。在发送数据之前,还需要对每个点的坐标进行处理,保持每个点的宽、高都同比缩放,则令宽的比例:aspect_x=width_p/width_c高的比例:aspect_y=height_p/height_c单点的坐标如下:x=aspect_x*event.getx();y=aspect_y*event.gety()event.getx()、event.gety()分别为获取的车载设备的屏幕上图像显示点的横坐标和纵坐标,x、y分别为计算所得的转换至安卓移动终端上所对应的横坐标和纵坐标。step4发送数据(adb)通过usb或者wifi传输通道把数据发送到安卓移动终端(手机),手机端应用接收到数据后,转化数据到手机的c可执行程序。写入该数据到android系统节点中组装数据分别写入用户的up,down,move等数据到/dev/input/eventnote设备节点中。数据组装举例,以zte手机机型为例:定义down、move、up必须上报的数据如下:intmdowndata[downdata][data_num]={{3,57,10},{1,330,1}};intmmovedata[movedata][data_num]={{3,58,50},{3,53,0},{3,54,0},{0,0,0}};intmupdata[updata][data_num]={{3,57,-1},{1,330,0},{0,0,0}};注:其中加粗且标记下划线的标记处需要动态填写数据由于不同手机的厂商都有可能进行定制化处理,在具体实现上有部分差异,需要对手机进行适配,目前本方案可覆盖市面的主流手机。而对于一些少用的机型也可以进行扩展适配,从而达到对所有android系统手机的全覆盖。上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1