一种安卓系统标准输入事件的转换方法及装置与流程

文档序号:16747081发布日期:2019-01-28 13:45阅读:174来源:国知局
一种安卓系统标准输入事件的转换方法及装置与流程

本发明涉及移动设备的外设控制,尤其涉及一种安卓系统中标准输入事件的转换方法、电子设备及存储介质。



背景技术:

目前,市面上绝大部分手游只能够通过手机、平板等移动设备的屏幕来实现触控游戏操作,在操控方面有着诸多不便、体验感不好。另外,游戏手柄、键盘鼠标这类外设对游戏具备良好的操作体验,但是游戏厂商很多、游戏的种类也很多,以及受到移动设备的安卓系统、手柄接口等因素的限制,导致手柄与游戏之间不能够很好的适配。

为了通过手柄来实现对手游等的操作控制,现有的技术方案一般采用以下两种方式:其一,将安卓系统root(也即是通过破解获取系统超级管理员权限)后获取超级管理员权限来实现指定指令的调用,但是此方法存在泄漏消费者隐私、破坏系统稳定性等安全隐患,同时也失去了设备的官方保修权利;另外,对于系统root的操作方法也极为复杂,需要专业人员操作和存在一定的系统破坏分析,很大为用户所接受。其二,利用安卓官方开放的开发者功能,获取向其他应用或系统发送触摸及按键动作所需要的权限,达到无需root权限来发送相关指令的解决方法;比如获取shell权限后,通过一定的方法将对应程序进驻到系统中,并运行使其成为守护进程,一直运行在系统后台等待处理指令,以达到按需接收指令和发送触摸及按键指令的目的;此方法需要电脑或其他具备adb功能的神安装程序,操作繁琐,每次手机重启后需要重新设置,且程序一直在后台运行,存在被手机系统回收的分析,同时加大手机耗电量以及手机发热量等问题。



技术实现要素:

为了克服现有技术的不足,本发明的目的之一在于提供一种安卓系统标准输入事件的转换方法,其能够解决现有技术中不能通过外设控制手机应用的操作、或需要开通特别权限、或通过外设操作手机应用时其操作繁琐、复杂等问题。

本发明的目的之二在于提供一种电子设备,其能够解决现有技术中不能通过外设控制手机应用的操作、或需要开通特别权限、或通过外设操作手机应用时其操作繁琐、复杂等问题。

本发明的目的之三在于提供计算机可读存储介质,其能够解决现有技术中不能通过外设控制手机应用的操作、或需要开通特别权限、或通过外设操作手机应用时其操作繁琐、复杂等问题。

本发明的目的之一采用如下技术方案实现:

一种安卓系统标准输入事件的转换方法,包括以下步骤:

创建沙盒步骤:创建虚拟空间并在该虚拟空间中安装至少一个应用;

外设数据获取步骤:获取外设的原始数据;

配置数据获取步骤:获取该虚拟空间中正在运行的应用,并根据该正在运行的应用获取对应的预设好的配置模板;

转换步骤:根据外设的原始数据与配置模板生成对应的标准输入事件;

发送步骤:将标准输入事件发送给正在运行的应用,进而实现通过外设对应用的操作控制。

进一步地,与外设的连接方式为有线连接或无线连接。

进一步地,所述标准输入事件为触摸事件或按键事件。

进一步地,所述应用为游戏应用。

本发明的目的之二采用如下技术方案实现:

一种电子设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以下步骤:

创建沙盒步骤:创建虚拟空间并在该虚拟空间中安装至少一个应用;

外设数据获取步骤:获取外设的原始数据;

配置数据获取步骤:获取该虚拟空间中正在运行的应用,并根据该正在运行的应用获取对应的预设好的配置模板;

转换步骤:根据外设的原始数据与配置模板生成对应的标准输入事件;

发送步骤:将标准输入事件发送给正在运行的应用,进而实现通过外设对应用的操作控制。

进一步地,与外设的连接方式为有线连接或无线连接。

进一步地,所述标准输入事件为触摸事件或按键事件。

进一步地,所述应用为游戏应用。

本发明的目的之三采用如下技术方案实现:

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如本发明目的之一采用的一种安卓系统标准输入事件的转换方法的步骤。

相比现有技术,本发明的有益效果在于:

本发明通过在安卓系统中创建虚拟空间并在该虚拟空间下安装相应的应用,进而可根据获得的外设数据生成相应的标准输入事件,并将标准输入事件发送给相应的应用,从而完成应用的操作配置,完成通过外设对应用的操作替代通过触摸屏幕对应用的操作,解决现有技术中通过触摸屏幕对应用的操作其手感操作体验不好的问题;同时其也解决现有技术中通过系统root来实现外设对应用的操作配置时需要具备专业技能的人来实现,其不适用于普通用户的缺陷。

附图说明

图1为本发明提供的一种安卓系统标准输入事件的转换方法的工作原理框图;

图2为本发明提供的一种安卓系统标准输入事件的转换方法的流程图;

图3为本发明提供的沙盒工作原理图之一;

图4为本发明提供的沙盒工作原理图之二。

具体实施方式

下面,结合附图以及具体实施方式,对本发明做进一步描述,需要说明的是,在不相冲突的前提下,以下描述的各实施例之间或各技术特征之间可以任意组合形成新的实施例。

基于安卓系统的特性,其内部存在应用隔离机制,导致不同的app之间是不能够直接互相通信,也即是不能互相发送数据指令的。也即是:应用隔离机制是基于linux系统的多用户机制来实现的,即每个应用在安装时均被分配了不同的linux用户uid。而正常情况下,安卓系统中,如果其中一个应用需要向其他应用或系统发送指令时,一般来说,在系统默认权限的情况下,会收到系统安全性约束,是无法实现的。

为了解决上述问题,本发明通过在系统中创建一个虚拟空间,在该虚拟空间内可以任意安装、启动和卸载应用,这一切均与外界隔离,如同一个沙盒。在该沙盒内,通过沙盒安装的应用与沙盒本身具备相同的uid,这样就可以通过沙盒将指令发送给相同的uid的其他应用;也即是说通过沙盒的这种机制,提供了向应用发送标准输入事件的环境,由于沙盒内的app均与沙盒本身具备相同的uid,因此沙盒内的app就能够响应相应的事件操作。

本发明就是通过在安卓系统内创建一沙盒,然后利用沙盒机制来实现向安装在该沙盒内的app发送数据指令。通过接收外设的原始数据并将其转换为相应的触摸事件,再通过沙盒发送给相应的app,实现通过外设对该应用的操作配置,进而可实现通过外设对该应用的标准输入事件操作控制。另外,本发明中所指的应用为支持标准输入事件的各种手机应用,比如游戏类。另外,本发明中的具体实施例中主要是以游戏应用来说明其具体是如何实现的。

如图1所示,在移动设备上创建虚拟空间,也即是沙盒,然后通过移动设备与外设连接,接收到相应的外设的数据,然后在通过沙盒将外设的数据发送给安装在该虚拟空间下的app,从而完成对app的标准输入事件的配置。

如图2所示,该转换方法具体包括以下步骤:

步骤s0:创建虚拟空间并在该虚拟空间内安装相应的app。通过在安卓系统中创建虚拟空间,并将需要的app安装到该虚拟空间内,比如将王者荣耀、乱斗西游、绝地求生大逃杀等应用的app安装在该虚拟空间内。当然这里的app,不仅仅只游戏应用,也可以是其他支持触摸事件、按键事件等标准输入事件的应用。

这样安装在该虚拟空间内的app的uid与该沙盒的uid均相同,就可以通过该沙盒向对应的app发送相应的指令。另外,本发明中的沙盒技术可以采用virtualapp和droidplugin。以下以virtualapp(简称va)举例来说明沙盒的工作原理:

va是一个开源的android应用容器框架,允许用户在系统中创建虚拟空间,并且安装第三方应用(app)到该虚拟空间中。为了保证应用可以无感知的运行在容器中,va参照framework源码实现,构造了一个能够运行app的环境。

系统原生的framework运作方式,我们平时所用到的app运行空间中的frameworkapi最终会通过binder远程调用到frameworkservice空间的远程服务。而远程服务类似ams中会持有app空间的ibindertoken句柄,通过token也可以让frameworkservice远程调用到app空间,如图1所示。

而在va环境下,情况其实也是类似,只不过在frameworkservice和clientapp之间还有另外一个va实现的vaservice;该vaservice仿造了frameworkservice的一些功能,完成系统服务的代理和替换。

因为在va中运行的clientapp都是没有(也不能注册)在frameworkservice的,注册的只有va预先注册在androidmanifest中的stub而已。所以frameservice是无法像普通app一样管理vaclientapp的会话的。这就要依靠va仿造的另外一套vaservice完成对va中clientapp的会话管理了,如图2所示。

从启动virtualapp到运行其中的应用,大致流程如下:

(1)启动host应用:

启动virtualapp,其application为io.virtualapp.vapp。在attachbasecontext()方法中会调用到com.lody.virtual.client.core.patchmanager#injectinternal,但此时为mainprocess,不进行系统服务的替换。

(2)启动serverprocess:

host应用会进行一些初始化,其中就包括获取全部已安装应用,这会调用到com.lody.virtual.client.core.virtualcore#getallapps。而这一方法最终会访问com.lody.virtual.server.binderprovider。由androidmanifest.xml可知,该provider会运行在新进程io.virtualapp:x中,即serverprocess。

由于在新进程中启动组件,同样会首先创建该应用的application,因此也会调用到com.lody.virtual.client.core.patchmanager#injectinternal。此时,会进行相应系统服务(activitymanager和packagemanager)的代理构造和替换。

(3)启动vappprocess:

点击一个已安装应用,此时会通过替换掉的系统服务访问真实的系统服务:并在新进程中启动组件com.lody.virtual.client.stub.stubactivity.c0。由androidmanifest.xml可知,该进程具有后缀:p0。

同样的,在该activity组件启动之前会初始化io.virtualapp.vapp,并在com.lody.virtual.client.core.patchmanager#injectinternal中完成系统服务的代理构造和替换。

(4)启动client应用:

此时,真正的client应用尚未启动,进程io.virtualapp:p0仅仅是作为一个placeholder。stubactivity会从intent中获取到client应用的相关信息,并修改自身activitythread的handler。随后调用startactivity启动client应用。

由于之前serverprocess和vappprocess都已完成了相关系统服务的替换,这里会完成client应用的bindapplication调用、构造client应用的loadedapk,并通过反射完成真正的application和activity的创建。

最终,client应用便运行在了我们的vappprocess中。

在虚拟空间内安装完app后,就需要与外部的设备连接来接收外部的设备的数据,也即是该方法还包括步骤s1:与外设连接并获取外设的原始数据。

其中,外设可包括鼠标、键盘等。

步骤s0和步骤s1在实际的执行过程中并没有先后顺序,也可以先通过与外设建立连接接收外设的原始数据后,再创建虚拟空间。

而且,由于沙盒是安装在移动设备上的,当外设与移动设备连接时,沙盒能够接收到外设的原始数据。

由于该转换方法是应用到移动设备中,比如手机、平板等,因此在接收外设的数据时,其与外设的连接方式可以是无线的,也可以是有线的;可以是标准输入,也可以是非标准输入。不同的连接方式,其获取数据的方式不同。

常见的连接方式比如:wifi、2.4g、蓝牙连接等其他无线连接、有线连接等,比如对于标准输入,一般操作系统均具备标准的接口读取数据;而非标准数据为定义的数据,可通过通信标准来实现数据的获取。

比如有线连接的方式为:hid、otg等,其中hid和otg都是通过系统标准键值数据解析,其均指usb类别的连接方式。其中hid,全称:人机接口设备(humaninterfacedevice);而otg,全称:on-the-on,主要是应用于各种不同的设备或移动设备之间的连接,比如可以连接键盘、鼠标、游戏杆等。

其数据获取过程如下:一般来说,当外部设备可用时,由于linux内核会在/dev/input/下创建对应的名为event0~n或其他名称的设备节点。而当外部设备不可用时,则会将对应的节点删除。在用户空间可以通过ioctl的方式从这些设备节点中获取其对应的输入设备的类型、厂商、描述等信息。

当用户操作输入设备时,linux内核接收到相应的硬件中断,然后将中断加工成原始的输入事件数据并写入其对应的设备节点中,在用户空间可以通过read()函数将事件数据读出。

因此,当外设的连接方式为hid和otg时,通过安卓系统来监控/dev/input/下的所有设备节点,判断是否存在所需要的外设设备节点。该外设设备节点类似于文件,则只要有数据就会写入该文件,当节点有数据可读时,将数据从该文件中读出,也即是所需要的外设的数据。

无线方式比如ble,全称:蓝牙低功耗,bluetoothlowenergy;其数据的获取过程如下:

由于ble分为三部分service、characteristic、descriptor,这三部分都由uuid作为唯一标示符。一个蓝牙4.0的终端可以包含多个service,一个service可以包含多个characteristic,一个characteristic包含一个value和多个descriptor,一个descriptor包含一个value。一般来说,characteristic是手机与ble终端交换数据的关键。android手机与ble终端设备通信结果都是以回调的形式返回。当我们开始连接蓝牙终端设备的时候,连接方法就自动就帮我们返回了一个bluetoothgatt对象了,它相当于一个管道,是我们建立通信的前提。我们在得到一个相应的特征以后,接下来就可以开始读写操作进行通信了。也即是说,当外设与该移动设备的连接方式为蓝牙连接时,直接获取对应的外设的原始数据即可。

步骤s2:获取该虚拟空间中正在运行的应用,并根据该正在运行的应用获取对应的预设好的配置模板。

由于应用是安装在虚拟空间内的,因此当需要对应用进行操作控制时,首先启动安装在该虚拟空间内的应用,然后根据该应用获取相应的配置模板。

而为了通过使用外设来达到对游戏的操作控制,首先也需要对游戏的操作进行配置,其中,配置时,不仅仅需要获取外设的原始数据,还需要获取相对应的配置模板。

其中,配置模板为编程人员预先为每个的游戏设置的,并根据游戏的不同存储于其他服务器上,比如远程服务器、本地服务器。

在获取配置模板时,首先需要对正在运行的游戏进行识别,比如通过应用的包名、应用名称、应用的进程、启动应用时的标记等。

另外,本发明还提供了相应的配置模板事例,该配置模板记录了对应游戏的各种按键的配置信息说明,比如:

(1)普通按键的定义类型说明,如下:

点击模式:模拟人手点击屏幕,按钮中心为点击位置。

连击模式:模拟人手连续点击屏幕,按钮中心为点击的位置,可调整连击速度。

轮盘模式:可选择关联摇杆及调整轮盘大小。适合于王者荣耀等moba游戏的指向性技能与定点投放技能,组合以后按住映射技能的键位同时摇动组合摇杆,可控制技能释放的方向。

(2)摇杆的定义类型说明如下:

摇杆模式:模拟游戏里的移动虚拟摇杆,选择该模式后,将摇杆映射图标拖到相应位置并调节适合的半径,即可用摇杆控制人物移动。

滑动模式:模拟触屏,进行视角操控,可调节精准度及灵敏度。

鼠标指针模式:模拟出虚拟的鼠标指针,和实际的鼠标指针操作一样,可设置灵敏度。

进一步地,本发明还包括步骤s3:根据外设的原始数据与配置模板生成标准输入事件。这里的标准输入事件,比如触摸事件、按键事件。

比如根据游戏应用的配置模板可得出该游戏应用中每个按键对应的触摸模式、触摸坐标等参数,然后将其与接收的外设的原始数据(按键数据等)进行关联来生成对应的触摸事件。也即是:在配置模板中查找相应按键所对应的配置信息,比如该按键的坐标、模式等,然后根据配置信息以及外设的按键数据来生成该按键的触摸事件,也即是完成了该按键的配置操作。

比如,配置上行记录x键的对应坐标是屏幕位置的的(x:100,y:100),当你按下x键后,从原始数据中判别按下的是x键,再从配置上找到x键的数据,也就是(x:100,y:100),因此关联出触摸事件或按键事件等。

步骤s4:将标准输入事件发送给该应用,进而实现应用中标准输入事件的配置。

由于安装在沙盒内的应用的uid与沙盒的uid是相同的,因此生成的标准输入事件可直接为该应用使用,也即是实现了游戏中标准输入事件的配置,解决了现有技术中不同的应用之间,由于安卓系统的约束而不能够互相发送数据指令的问题,同时还实现了通过外设来实现对触控游戏等应用的操作控制。特别是通过外设来代替触摸移动设备的屏幕来操作游戏,增加用户玩游戏的手感操作性能。

比如对于现如今来说,一般在pc机上玩游戏时,会使用鼠标、键盘等外设来实现游戏的操作;而手游的话,都是需要通过触摸屏幕来实现游戏的操作,但是由于移动设备的屏幕小、触摸时手感操作体验不好,这样玩游戏时体验性能不好,而通过本发明可通过外设来替代触摸屏幕来实现游戏的操作,解决了移动设备屏幕小、触摸屏幕手感操作体验不好的问题。

本发明还提供了一种电子设备,其包括存储器、处理器以及存储在存储器上并可在处理上运行的计算机程序,所述处理器执行所述程序时实现如文中所述的一种安卓系统标准输入事件的转换方法的步骤。

本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现如文中所述的一种安卓系统标准输入事件的转换方法的步骤。

上述实施方式仅为本发明的优选实施方式,不能以此来限定本发明保护的范围,本领域的技术人员在本发明的基础上所做的任何非实质性的变化及替换均属于本发明所要求保护的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1