一种安卓终端虚拟按键实现方法与流程

文档序号:13804407阅读:315来源:国知局
本发明属于智能终端
技术领域
:,具体涉及一种安卓终端虚拟按键实现方法。
背景技术
::触屏智能终端经过长期使用后,经常会出现系统按键使用失效或不灵敏的情况。诸如返回键,菜单键,home键等的系统按键,通常设置在终端的固定位置,例如大都设置在屏幕最下方的位置,用户只能通过点击这个区域才能执行相应的功能,而这些按键往往也是用户使用最频繁的按键,长期使用后,导致此区域不灵敏或者失效。尽管屏幕其它大部分区仍灵敏好用,但是如果这些按键区域不能使用,将导致终端很难操作,用户只能花钱去换屏幕或者购买新的终端。如图1所述,现有技术中通过采用自定义的虚拟按键来代替系统按键,例如接收生成虚拟功能按键的命令(s11);根据所述生成虚拟功能按键的命令,生成虚拟功能按键,所述虚拟功能按键包括虚拟功能按键主体和虚拟功能按键呼出点(s12),即根据预先定义的虚拟功能按键的命令,根据焦点所在位置,发送不同的虚拟按键命令,从而代替了实体按键。现有技术中的上述技术方案存在如下缺点:一是需要预先定义好虚拟功能按键命令,这个操作需要系统权限才可以办到,并且需要将其预先集成到终端rom中才行,只有和终端厂商合作或者终端厂商自己才能实现此类功能;二是预先定义好的虚拟按键对应的命令增加了存储成本,并且不利于维护;三是不能根据用户的心意,随意将虚拟按键功能放到屏幕上的任意位置。技术实现要素:为克服上述现有技术的不足,本发明提供了一种安卓终端虚拟按键实现方法。首先只需要启动自定义的一个shell命令行,然后在root环境下,调用执行系统自带的可执行文件input,并同时指定第一个参数为keyevent,第二个参数为按键对应的键值(不同的键对应不同键值,如返回键对应的数值为4,菜单键对应的数值为82,这些值是系统预先定义好,对外开放的,可以通过源码或sdk查询到)即可。所述安卓终端虚拟按键实现方法,包括以下步骤:s401、开始,点击悬浮按键;s402、展开悬浮窗,点击悬浮窗上的功能按键;s403、判断终端是否root;如果判断结果为否,则执行s404,如果判断结果为是,则执行s405;s404、提示终端未root,无法使用此功能,继续执行s4013;s405、申请root权限,系统提示是否赋予该app权限,当root权限申请成功后执行s407,当root权限申请不成功则执行s406;s406、未获得root权限,执行失败,继续执行s4013;s407、提取按键对应的键值码code值;s408、创建一个shell的执行环境;s409、在shell环境中执行指令;s4010、判断指令是否执行成功;当判断结果为否时,执行步骤s4011,当判断结果为是时,执行步骤s4012;s4011、指令执行失败,继续执行s4013;s4012、实现相应的系统按键功能;执行成功,系统会响应执行的系统按键功能;s4013、退出;此时可以选择关闭悬浮窗,也可以继续保留悬浮窗,继续执行其它按键功能。上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。附图说明图1示出了现有技术中实现虚拟功能按键的方法流程图;图2示出了根据本发明的一个实施例的悬浮按键示意图;图3示出了根据本发明的一个实施例的悬浮窗示意图;图4示出了根据本发明的一个实施例的实现虚拟按键的方法流程图;图5示出了根据本发明的一个实施例的悬浮按键及悬浮窗启动流程图;图6示出了根据本发明的一个实施例的shell环境创建流程图。具体实施方式为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的一种安卓终端虚拟按键实现方法其具体实施方式、特征及其功效,详细说明如后。在下述说明中,不同的“一实施例”或“实施例”指的不一定是同一实施例。此外,一或多个实施例中的特定特征、结构、或特点可由任何合适形式组合。本发明所使用的术语如下:android:中文名称为安卓,是一种基于linux的自由及开放源代码的操作系统,主要用于移动设备,如智能终端和平板电脑,由google公司和开放终端联盟领导及开发。root权限:root权限是指unix类操作系统(包括linux,android)的系统管理员权限,类似于windows系统中的administrator(管理员)。安卓root权限可以访问和修改你终端中几乎所有的文件(android系统文件及用户文件,不包括rom)。可执行文件:可执行文件(executablefile)指的是可以由操作系统进行加载执行的文件。在不同的操作系统环境下,可执行程序的呈现方式不一样。shell:shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。它是linux的一个命令解释器,它解释由用户输入的命令并且把它们送到内核去执行。本发明中创建的一个命令行进程实现的功能和系统的shell相同,因此也命名为shell。虚拟按键:终端虚拟按键是指用于全触摸终端的虚拟于屏幕的一个按键,利用此按键可直接实现系统按键的功能。在本发明的一个具体实施方式中,提供一种在android智能终端屏幕任意位置通过定义的虚拟按键代替系统实体按键的方法。如图2所示,方框中示出的悬浮按键可悬浮至屏幕的任意位置,并且可以悬浮在大部分终端应用界面之上。通过点击悬浮按键可弹出一个悬浮窗,同时将悬浮按键关闭。根据本发明的一个优选实施方式,如图3所示,悬浮窗尺寸可设置为供放置若干按键,这些按键分别对应不同的功能,点击其中的某一个按键可以实现相应的功能。在本发明的一个具体实施方式中,以实现系统按键为例,如点击返回键,例如参考图3左下角的“返回”按键。在本发明的一个具体实施方式中,在点击“返回”键后,判断终端是否root成功,如果未root,则提示用户要使用此功能首先需要root,在本发明的一个具体实施方式中,提供可以root终端的工具下载地址;接着虚拟按键流程将会退出,操作失败;如果root成功了,则会由系统弹出赋予此应用的权限授予窗口,用户点击允许后,就获取到root权限,否则提示未授予权限,操作执行失败。在获得root权限后,会判断用户将要执行哪种按键功能,并将此按键对应的键值码提取出来,如返回键的键值码为keycode_back,其对应的数值为4。这个值是系统预先定义好,对外开放的,可以通过源码或sdk查询到。接着使用“su”作为参数,创建一个shell的执行环境,在执行此指令时将会向系统索取root权限,因为之前应用已经获取到了权限,所以这里不再提醒用户赋予应用权限。在创建成功后,将诸如“inputkeyevent按键键值码”这样的字符串命令通过封装好的方法传递到shell执行指令环境中,然后在shell环境中执行此条指令,其中“input”代表系统的可行性文件,它用来实现虚拟按键功能,一般存在于系统的/system/bin目录下。它是系统自带的一个输入按键程序,不同于的java程序,它是一个二进制的可执行程序,只能在命令行环境进行执行。这个执行文件不对外开放,只有获取了系统权限或者root权限的应用才可以调用它,所以本发明的一个前提是系统需要root,这样才能调用到这个可执行文件。它在执行时,需要两个参数,第一个参数keyevent,表示后面的参数是一个按键键值,并且是一个单击按键消息;第二个参数表示按键对应的键值码,如返回键的键值码为keycode_back,对应的数值为4。如果执行的是一个虚拟按返回键,它的指令类似于“inputkeyevent4”这样的格式,注意指令和参数之间用空格隔开。执行成功后,系统会对按键做出响应,否则将提示执行失败。通过这样上述步骤,实现了虚拟系统按键或者实体按键的功能。在本发明的一个具体实施方式中,提供了详细的利用shell指令,系统可执行文件input实现虚拟按键的方法,如示例图4,其实现的步骤如下:s401、点击悬浮按键,开始;根据本发明的一个优选实施方式,利用悬浮按键来展示待机状态,利用悬浮窗来实现具体的功能。点击悬浮按键后悬浮窗将会被展开,同时悬浮按键进行隐藏;悬浮窗关闭后,悬浮按键会显示出来。即悬浮按键和悬浮按钮是相互排斥出现的,遵循“你显示,我隐藏;你隐藏,我显示”。根据本发明的一个优选实施方式,悬浮窗可随意拖动,并悬浮于任意应用之上,因此在本发明中使用悬浮窗作为虚拟按键的载体。根据本发明的一个优选实施方式,可以以其它方式实现虚拟按键的载体,不一定是悬浮窗,可以是悬浮按键,例如,点一次按键执行一次预置好的指令,如返回键。s402、展开悬浮窗,点击悬浮窗上的功能按键;根据本发明的一个优选实施方式,点击悬浮按键展开悬浮窗后进一步通过点击悬浮窗上的功能按键来选择具体的功能按键,如返回键、菜单键、电源键等。s403、判断终端是否root;如果判断结果为否,则执行s404,如果判断结果为是,则执行s405。此功能的实现需要终端root权限的支持。判断终端是否root,一般是通过检测一些常用的系统目录是否存在su文件来实现的,例如检测/system/bin/,/system/xbin/,/sbin/,/system/sd/xbin/,/data/local/xbin/,/data/local/bin/等目录是否存在su文件,如果存在就认为终端root了。根据本发明的一个优选实施方式,还可通过其它检测方式,比如直接在shell指令里执行“su”,在返回的输出系统中执行一条简单打印指令,如果返回成功,则代表root成功;根据本发明的一个优选实施方式,可以通过第三方的库函数来进行检测。s404、提示终端未root,无法使用此功能,继续执行s4013;当检测到终端未root成功,例如su文件不存在,则给出相应的错误提示;根据本发明的一个优选实施方式,可引导用户去对终端进行root,如提示一个下载root工具的地址,从而获得更好的用户体验。s405、申请root权限,系统提示是否赋予该app权限,当root权限申请成功后执行s407,当root权限申请不成功则执行s406。在执行具体的shell指令之前,需要获取到root权限,尽管终端已经root了,但是如果没有获得使用root权限的授权,同样会执行失败。根据本发明的一个优选实施方式,使用第三方库rootmanager_1.5.0.jar中的hasrooted()方法来检测是否赋予此app权限,执行hasrooted()方法后,会触发系统的权限管理,只有系统赋予root权限后,才能继续执行。终端在被root后,通常由一个root管理工具来对系统的root权限进行管理,在需要使用root权限时,都会触发系统的root管理工具,管理工具通常提示用户,是否赋予root权限,只有在点击确认后才能获得root权限,然后才能执行相应的功能,否则会提示获取权限失败。用户也可以到root管理工具中主动赋予app权限,可以选择允许,提示,禁止三种操作。s406、未获得root权限,执行失败,继续执行s4013;如果未获得root权限则提示用户,并退出功能。根据本发明的一个优选实施方式,可设置友好提示,引导用户去放开权限。s407、提取按键对应的键值码code值;终端root成功后,则开始提取虚拟按键对应的键值码code值。code值为系统各个按键的键值码,系统为每个键提供了唯一标识,如keycode_back=4表示返回键,keycode_power=26表示电源键,keycode_menu=82表示菜单键。计算出悬浮窗点击的按键将要对应的系统按键code值,以点击返回键为例,由于要实现系统返回键,所以code值为4。s408、创建一个shell的执行环境;使用“su”作为参数,创建一个shell的执行环境,在执行此指令时将会向系统索取root权限,因为之前已经获取到了root权限,所以这里不再提醒用户赋予root权限。创建shell命令行执行环境是一个比较复杂的过程,需要首先生成一个process进程,然后在进程中创建一个子线程验证其是否成功,完成后,通过一个名为“id”的指令进一步验证命令行环境是否是root环境,然后才能使用。具体的步骤可以参考图6,对其进行了较详细的说明。s409、在shell环境中执行指令,根据本发明的一个优选实施方式,指令可以采用形如“inputkeyevent按键键值码”的字符串;在创建shell环境成功后,将形如“inputkeyevent按键键值码”这样的字符串命令通过封装好的方法传递到shell执行指令环境中,然后在shell环境中执行此条指令,其中“input”代表系统的可行性文件,它用来实现模拟实现按键功能,一般存在于系统的/system/bin目录下。它是系统自带的一个模拟输入安检程序,不同于的java程序,它是一个二进制的可执行程序,只能在命令行环境进行执行。这个执行文件不对外开放,只有获取了系统权限或者root权限的应用才可以调用它,所以本发明实施的前提是系统得需要root,这样才能调用到这个可执行文件。它在执行时,需要两个参数,第一个参数keyevent,表示后面的参数是一个按键键值,并且是一个单击按键消息;第二个参数表示按键对应的键值码,如返回键的键值码为keycode_back,对应的数值为4。如果执行的是一个虚拟按返回键,它的指令类似于“inputkeyevent4”这样的格式,注意指令和参数之间用空格隔开。s4010、判断指令是否执行成功;此步骤主要依靠判断执行结果的返回值来进行处理,如果为true,表示命令执行成功,返回false,表示执行失败。当判断结果为否时,执行步骤s4011,当判断结果为是时,执行步骤s4012。s4011、指令执行失败,继续执行s4013;shell指令执行失败,将退出程序,释放之前申请的资源,退出创建的shell进程等等,并提示用户出错的信息。s4012、实现相应的系统按键功能;执行成功,系统会响应执行的系统按键功能。如点击返回键,会将当前的页面关闭。s4013、退出:执行退出功能,此时可以选择关闭悬浮窗,也可以继续保留悬浮窗,继续执行其它按键功能。为了快速,便捷,随心所欲地操作虚拟按键功能,本发明使用了悬浮按键和悬浮窗的技术,并且为了能够使悬浮按键和悬浮窗及时响应用户输入,启动了一个service进程来进行管理,使应用程序不容易被系统或第三方杀死。参考图5说明悬浮按键和悬浮窗启动过程以及工作流程。s501、启动程序;程序启动入口分三种情况,一种是程序刚刚安装成功,这时自动启动程序;第二种是终端已经安装了本程序,重新开机,收到系统开机广播或者其它常用的系统广播消息,如网络变化,开关蓝牙,gps等等,将触发其自动启动运行;第三种是用户手动点击程序图标,启动程序。s502、启动客户端进程;程序启动后首先运行客户端进程,此进程中包含了悬浮窗的所有设置功能以及其他一些辅助功能,如主题替换,设置功能项的开关,信息反馈,帮助,版本信息等内容。s503、由客户端进程启动一个androidservice进程;通常具有两个进程,一个是客户端进程,一个是service进程,前者是对主要功能的一些辅助设置,后者用来实现具体的功能,service的优势是可以运行在系统的后台,并且不容易被杀死,用它可以提供持久的悬浮窗展示,提升了用户的体验度。s504、在service进程中分别创建悬浮按键和悬浮窗;悬浮按键和悬浮窗的实现原理类似,都是通过系统的windowmanager(窗口管理器)提供的addview方法在系统界面管理器中添加一个窗口,并将此新加的窗口的优先级设置为type_system_alert级别的,这样它的优先级非常的高,就可以显示于大多数系统窗口之上了,达到了“悬浮”于其它窗口之上的目的。s505、service进程在后台一直保持运行,显示悬浮按键,隐藏悬浮窗;sevice进程的一个优势就是可以在后台一直保持运行,在其启动后,待机状态时,将悬浮按键显示出来,而将悬浮窗进行隐藏,这两者的关系是互斥的,“你显示,我隐藏;你隐藏,我显示”。s506、判断是否点击悬浮按键;执行具体功能时需要先点击悬浮按键,将悬浮窗显示出来。如果判断结果为否,则执行s507;如果判断结果为是,则执行s508。s507、待机运行,继续监听按键事件,返回至s505;如果没有点击事件发生,悬浮按键将保持待机运行,直到监听到按键事件。s508、显示悬浮窗,隐藏悬浮按键;收到点击事件,将悬浮按键隐藏,并实现悬浮窗。s509、展示支持的各种按键功能;展开悬浮窗,展示所支持的所有功能,例如,虚拟返回按键功能。通过viewpager(android系统的一种标准控件,可以左右滑动切换不同的界面)控件来实现悬浮窗页面功能项展示,可以展示多屏内容,通过左右滑动来进行切换。s5010、点击屏幕,判断点击的位置是否是悬浮窗上的虚拟功能键;点击屏幕,判断点击的位置是否是悬浮窗对应的功能按键。如果判断为是,则执行s5011;如果判断为否,则执行s5013。s5011、执行对应的功能:针对点击来执行对应的按键功能,从而最终实现“虚拟按键”功能。如果点击的是悬浮窗的某一个展示项,将触发点击对应的功能,比如系统的返回按键功能。s5012、待机运行,继续监听按键事件:按键功能执行完毕,保持悬浮窗显示,继续执行其它的功能。悬浮窗待机运行,继续监听按键事件。s5013、退出悬浮窗,将其隐藏,展示悬浮按键;如果点击的位置不是悬浮窗上的某一个按键,而是点击空白处,则退出悬浮窗,将悬浮窗关闭,打开悬浮按键,返回s505;保持悬浮按键待机运行,继续监听悬浮按键的按键事件。只要不关机,悬浮按键可以一直悬浮显示,待机提供虚拟按键功能,达到系统按键同样的效果。以上是悬浮按键和悬浮窗启动过程以及工作流程,以下将详述一下如何创建具有root权限的shell命令行执行环境,以及借助这个环境如何实现虚拟按键的详细流程。在获得了root权限后,需要创建shell命令行执行环境,这个创建过程比较复杂,得需要验证其正确性,然后才能在这个环境中执行按键指令。具体执行流程如图6所示:s601、准备创建shell命令行环境;要借助root权限以及系统的可执行文件input进行按键事件的输入,需要创建一个可执行文件能够执行的命令行环境,在命令行中申请root权限,然后调用input实现虚拟按键的功能。首先得创建出这样的一个命令行环境,这个环境在程序实现的角度是一个process进程,而命令行需要有输入流datainputstream(java系统的数据输入流)和输出流dataoutputstream(java系统的数据输出流),用来进行命令的输入和执行结果的输出,在创建的shell类中需要先将这些创建出来。s602、使用系统类processbuilder创建一个process进程,传入的参数为“su”;由s601知道,shell命令行环境其实是一个process进程,我们使用系统类processbuilder的start()方法来创建这样一个process,同时将参数“su”传递给类processbuilder的构造函数,表示使用“su”命令来创建这个进程。创建成功后,应该是一个具有root权限的命令行环境,它的作用就类似于启动一个windows的dos窗口,在其中输入“adbshell”启动shell环境,然后输入su指令,进入root命令行执行环境一样。s603、启动子线程验证process进程是否创建成功;根据本发明的一个优选实施方式,使用"echostarted\n"指令验证此process进程是否创建成功;这里启动一个thread子线程来判断这个进程是否创建成功,在子线程中依据输出流dataoutputstream(java系统的数据输出流),在其中写入一个"echostarted\n"指令,然后获取其执行的结果,如果结果等于"started",说明在这个环境是一个正常的命令行执行环境。这里的echo是一个系统的shell指令,表示将后面的字符串原样输出。s604、判断验证期间是否有异常发生,如果判断结果为是,则执行s605;如果判断结果为否,则执行s606;在验证期间,需要对输入输出流进行操作,就有可能发生ioexception(系统的一种异常,表示输入输出流方面发生了异常情况)这样的io输入输出异常,所以需要对这类异常进行捕获,如果异常发生,说明验证期间出错,创建的process进程存在问题;否则表示正常。s605、创建shell环境失败,执行s6012;异常发生,说明创建的process进程存在问题,shell环境创建失败。s606、使用id指令进一步验证创建的shell命令行进程环境是否是一个root环境;由以上步骤确定process进程或者shell进程创建成功,但需要进一步判断当前是否处于root模式或者环境下。这里使用判断指令id执行的结果是否包含字符串uid=0来判断。创建一个“id”这样的字符串命令行交给shell进程执行,然后判断执行结果是否包含"uid=0"这样的字符串,如果包含,说明创建的进程是一个在root环境下的进程。因为命令id是用来确定当前使用者身份的指令,只有在系统root后,并且当前处于root环境时,才能得到uid是0这样的结果。s607、判断执行结果是否正确;如果判断结果为否,则执行s605;如果判断结果为是,则执行s608;判断结果是否包含"uid=0"这样的字符串,如果包含说明创建了一个有root权限的shell环境,否则说明这个shell环境创建失败。s608、创建shell的命令行进程环境执行成功;如果判断包含了root权限的shell的命令行进程环境创建成功,表示可以继续执行虚拟按键操作。s609、获取之前提取好的按键对应的键值码给变量keycode:在模拟系统按键指令前,需要先获取到按键对应的键值码赋值给变量keycode,获取后将其赋值给变量keycode。s6010、在shell命令行中执行指令“inputkeyeventkeycode”;获取模拟系统按键对应的键值码给变量keycode后,创建虚拟按键指令“inputkeyeventkeycode”,其中input是系统的可执行程序,用来模拟实现,第一个参数keyevent,表示后面的参数是一个按键键值,并且是一个单击按键消息;第二个参数表示按键对应的键值码,如返回键的键值码对应的数值为4。如果执行的是一个虚拟按返回键,它的指令类似于“inputkeyevent4”这样的格式,注意指令和参数之间用空格隔开。s6011、判断指令是否执行成功,如果判断结果为否,则执行s6012;如果判断结果为是,则执行s6013;依靠指令执行的返回值来判断虚拟按键执行是否成功。s6012、返回false,指令执行失败;执行s6014;如果执行失败,则返回给上层一个false值。s6013、返回true,指令执行成功;如果执行成功,则返回给上层一个true值。s6014、退出,返回执行结果;返回执行的结果,上层收到返回值,根据返回值决定是否继续往下执行。针对智能终端用户按键在长时间使用后,系统按键失效或者不灵敏的问题,本发明提出了一种解决的方法。首先,以悬浮窗的形式提供虚拟按键功能,可以起到系统按键无法做到的一些好处,比如用户可以在任意界面快捷的进行操作,方便快捷。其次,本方法可以解决几乎所有root终端用户的按键不好用的问题,并且不需要和终端厂商合作,只需要终端root即可,也不用预先定义虚拟功能按键对应的命令,“虚拟”实现了系统的返回键,菜单键,电源关机键等按键功能,解决了用户在按键不好用时,只能去换屏幕或者换终端的难题。此外,这些虚拟按键功能通过悬浮窗的方式展现给用户,悬浮窗的好处就是可以悬浮在屏幕的任意位置,用户可以随意拖动。它的上面可以放置任意多个按键,每个按键可以随意放置一些我们需要功能,如某个按键可以虚拟实现返回键功能,另一个按键可以虚拟实现菜单键功能等等。以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1