CN107704304A - 一种利用java反射机制进行灭屏的方法 - Google Patents
一种利用java反射机制进行灭屏的方法 Download PDFInfo
- Publication number
- CN107704304A CN107704304A CN201711021968.2A CN201711021968A CN107704304A CN 107704304 A CN107704304 A CN 107704304A CN 201711021968 A CN201711021968 A CN 201711021968A CN 107704304 A CN107704304 A CN 107704304A
- Authority
- CN
- China
- Prior art keywords
- screen
- suspended window
- function
- perform
- button
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明提供一种利用JAVA反射机制进行灭屏的方法,利用JAVA发射机制在Android智能终端屏幕任意位置通过定义的虚拟按键实现灭屏,将实现的功能以悬浮窗上的虚拟按键的形式进行表现,可以悬浮到屏幕的任意位置,并且可以显示在几乎所有的终端应用界面之上,这样就可以在任何情况下通过操作虚拟按键来代替按压电源实体按键实现灭屏。
Description
技术领域
本发明属于智能终端技术领域,具体涉及一种利用JAVA反射机制进行灭屏的方法。
背景技术
智能终端在经过长期使用后,较易出现实体按键使用失效或不灵敏的情况,实体电源键是用户使用频率较高的按键之一,通常,短按实体电源键的作用是点亮或者熄灭当前屏幕。如果当前系统处于亮屏状态时,且已设置锁屏功能,短按电源键则会将屏幕熄灭,同时将屏幕锁定。用户在使用完终端时,通常会短按电源键来进行灭屏,让终端进入待机状态。另外,“键如其名”,这个按键还有一个最核心的功能就是控制终端电源,即开关机功能,只能通过它来开关终端,实体电源按键在终端上的位置是固定的,一般设置在终端的侧面或者终端上方位置,用户只能通过按压这个区域才能执行相应的功能,长期使用后,容易导致这个按键区域变的迟钝,不灵敏或者失效。如果这个按键不能顺畅使用,将会使终端的操作性变差,很难进行灭屏操作,只能等待系统自动灭屏,导致终端耗电量增大。所以虽然终端其他方面都还很好,但是用户还是不得不花钱去更换按键,甚至购买新的终端。
如图1所述,现有技术中公开了一种灭屏方法及移动终端,包括:检测用户在点亮触摸屏时执行的亮屏操作,所述亮屏后的触摸屏处于锁屏状态(S101),根据所述亮屏操作,在所述触摸屏上呈现虚拟按钮(S102),当检测到用户通过所述触摸屏对所述虚拟按钮的操作满足预设条件时,控制所述触摸屏进入灭屏状态(103)。即用户在亮屏时执行亮屏操作,并且当前的触摸屏处于锁屏状态,然后系统根据亮屏的具体操作类型,在触摸屏上来决定是否呈现一个虚拟按钮,再根据对虚拟按钮的操作来决定是否进入灭屏状态
现有技术中的上述技术方案存在如下缺点:
一是需要有点亮触摸屏的前提条件,并且需要检测用户点亮屏后的进一步的亮屏操作是什么,这个需要系统权限才能做到,即系统平台应用才能有权限做到;
二是当前触摸屏处于锁屏状态,功能才能生效,这个和后面提到的灭屏也没有因果或者逻辑关系;
三是没有指明如何控制触摸屏进入灭屏状态,这个没有系统权限或者Root权限是无法实现的;
四是操作步骤过于繁琐。
发明内容
为克服上述现有技术的不足,本发明提供了一种利用JAVA反射机制进行灭屏的方法。
首先不需要和终端厂商合作,只需要终端Root即可,也不用预先点亮屏,并且不用获取亮屏后的操作,以及不需要当前处于锁屏状态,只需要启动自定义的shell命令行执行环境,然后在命令行中执行app_process命令,通过反射技术调用系统方法goToSleep()即可实现灭屏,全程不需要用户过多的参与。并且这个功能模拟成一个虚拟按键,通过悬浮窗的方式展现给用户(悬浮窗的好处是可以悬浮在屏幕的任意位置,用户可以随意拖动,悬浮窗上面可以放置任意多个虚拟按钮,每个按钮可以对应我们需要的任意功能,如某个按钮可以实现返回键功能,另一个按钮实现灭屏功能等等),从而可以使用户方便快捷的进行操作。
所述利用JAVA反射机制进行灭屏的方法,包括以下步骤:
S401、开始,点击悬浮按键;
S402、展开悬浮窗,点击悬浮窗上的灭屏功能按键;
S403、判断终端是否Root;如果判断结果为否,则执行S404,如果判断结果为是,则执行S405;
S404、提示终端未Root,无法使用此功能,继续执行S4016;
S405、提取虚拟功能按键要实现哪一种系统实体键;
S406、申请Root权限,系统提示是否赋予该app权限,当Root权限申请成功后执行S408,当Root权限申请不成功则执行S407;
S407、未获得Root权限,执行失败,继续执行S4016;
S408、执行adb shell指令;
S409、判断指令是否执行成功;当判断结果为否时,执行步骤S4010,当判断结果为是时,执行步骤S4011;
S4010、指令执行失败,继续执行S4016;
S4011、调用执行自定义的xxx.jar文件;
S4012、通过xxx.jar的main函数,执行实现类,反射调用系统方法goToSleep();
S4013、判断方法是否执行成功,判断结果为否,则执行S4014,判断结果为是,则执行S4015;
S4014、提示执行失败,执行S4016;
S4015、实现灭屏功能;
S4016、退出:执行退出功能,此时可以选择关闭悬浮窗,也可以继续保留悬浮窗,继续执行其它按键功能。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
图1示出了现有技术中实现终端灭屏的方法流程图;
图2示出了根据本发明的一个实施例的悬浮按键示意图;
图3示出了根据本发明的一个实施例的悬浮窗示意图;
图4示出了根据本发明的一个实施例的实现灭屏的方法流程图;
图5示出了根据本发明的一个实施例的悬浮按键及悬浮窗启动流程图;
图6示出了根据本发明的一个实施例的shell环境创建流程图。
具体实施方式
为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的一种利用JAVA反射机制进行灭屏的方法其具体实施方式、特征及其功效,详细说明如后。在下述说明中,不同的“一实施例”或“实施例”指的不一定是同一实施例。此外,一或多个实施例中的特定特征、结构、或特点可由任何合适形式组合。
本发明所使用的术语如下:
Android:中文名称为安卓,是一种基于Linux的自由及开放源代码的操作系统,主要用于移动设备,如智能终端和平板电脑,由Google公司和开放终端联盟领导及开发。
Root权限:Root权限是指Unix类操作系统(包括Linux,Android)的系统管理员权限,类似于Windows系统中的Administrator(管理员)。安卓Root权限可以访问和修改你终端中几乎所有的文件(Android系统文件及用户文件,不包括ROM)。
可执行文件:可执行文件(executable file)指的是可以由操作系统进行加载执行的文件。在不同的操作系统环境下,可执行程序的呈现方式不一样。
shell:shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。它是linux的一个命令解释器,它解释由用户输入的命令并且把它们送到内核去执行。本发明中创建的一个命令行进程实现的功能和系统的shell相同,因此也命名为shell。
app_process:是放在Android系统目录下的一个可执行二进制文件,利用它可以在shell命令行窗口执行一些预置的功能,例如系统的am,pm指令都是通过它实现的。
虚拟按键:终端虚拟按键是指用于全触摸终端的虚拟于屏幕的一个按钮,利用此按钮可直接实现系统按键的功能。
JAVA反射机制:JAVA反射机制是在程序运行状态中,对于任意一个类,都可以获取到这个类的所有属性和方法;对于任意一个对象,都能够调用到它的任意一个方法和属性。这种动态获取类的信息以及动态调用对象的方法的功能称为java语言的反射机制。
在本发明的一个具体实施方式中,提供一种在Android智能终端屏幕任意位置通过定义的虚拟按键代替长按系统组合按键实现灭屏的方法,将实现的功能以悬浮窗上的虚拟按键的形式进行表现,它的好处是可以悬浮到屏幕的任意位置,并且可以显示在几乎所有的终端应用界面之上,这样就可以在任何情况下通过操作虚拟按键来代替按压系统组合按键实现灭屏。我们首先提供一个悬浮按键,如图2中红圈中的悬浮按键,可悬浮至屏幕的任意位置,并且可以悬浮在大部分终端应用界面之上。通过点击悬浮按键可弹出一个悬浮窗,同时将悬浮按键关闭。根据本发明的一个优选实施方式,如图3所示,悬浮窗尺寸可设置为供放置若干按键,这些按键分别对应不同的功能,点击其中的某一个按键可以实现相应的功能。在本发明的一个具体实施方式中,以实现灭屏功能为例,例如参考图3的“灭屏”按键。
在点击“灭屏”键后,我们首先判断终端是否Root成功,如果未Root则提示用户要使用此功能首先需要Root,并提供可以Root终端的工具下载地址;如果Root成功了,则会由系统弹出赋予此应用的权限授予窗口,用户点击允许后,就获取到Root权限,否则提示未授予权限,操作执行失败。
在获得Root权限后,会判断用户将要执行哪种按键功能,是执行返回键,还是菜单键,还是灭屏键,不同按键实现流程不同。
首先,创建一个shell的命令行执行环境,在此环境中使用export指令设置环境变量,这里需要注意不同的Android系统版本在设置环境变量时,方法是有区别的,因此需要根据系统版本的不同采用不同的设置方法。
接着执行一条“exec app_process库所在的路径库中实现功能的类名”这样的shell指令,“库所在的路径”是指我们实现的java反射功能需要打包到一个xxx.jar(xxx表示名称可以根据需要自行定义,只要是字母组合的字符串即可)库中,这个库存放在apk的assets目录下,在程序首次运行时,会将其解压缩到“/data/data/包名/files/”路径下,库所在的路径就是指的这个路径;“库中实现功能的类名”指的是xxx.jar库中哪个类执行了反射注入键函数。
然后程序会执行xxx.jar库文件,通过xxx.jar库中的main函数跳到具体的类中,这个类通过反射技术调用了系统的预置方法goToSleep()来实现灭屏功能。其实终端的系统按键,例如返回键,菜单键都是调用类似方法来实现,只不过对于第三方应用来说,这些方法是屏蔽的,看不到的,并且没有权限执行。调用方法完成后,接着判断方法是否执行成功。执行成功后,系统会对按键做出响应,否则将提示执行失败。
通过这样一系列的步骤,就实现了“虚拟”系统实体电源键,从而实现灭屏的功能。
在本发明的一个具体实施方式中,提供了详细的利用shell指令,java反射技术实现虚拟灭屏按键的方法,如示例图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,无法使用此功能,继续执行S4016;当检测到终端未Root成功,例如su文件不存在,则给出相应的错误提示;根据本发明的一个优选实施方式,可引导用户去对终端进行Root,如提示一个下载Root工具的地址,从而获得更好的用户体验。
S405、提取虚拟功能按键要实现哪一种系统实体键;终端Root成功,说明程序可以继续往下执行,这时可以提取出面板上点击的是那个虚拟功能按键,例如,是实体电源键,还是返回键,或者菜单键等,不同的按键具有不同的实现方式。
S406、申请Root权限,系统提示是否赋予该app权限,当Root权限申请成功后执行S408,当Root权限申请不成功则执行S407。
在执行具体的shell指令之前,需要获取到Root权限,尽管终端已经Root了,但是如果没有获得使用Root权限的授权,同样会执行失败。根据本发明的一个优选实施方式,使用第三方库rootmanager_1.5.0.jar中的hasRooted()方法来检测是否赋予此app权限,执行hasRooted()方法后,会触发系统的权限管理,只有系统赋予Root权限后,才能继续执行。
终端在被Root后,通常由一个Root管理工具来对系统的Root权限进行管理,在需要使用Root权限时,都会触发系统的Root管理工具,管理工具通常提示用户,是否赋予Root权限,只有在点击确认后才能获得Root权限,然后才能执行相应的功能,否则会提示获取权限失败。用户也可以到Root管理工具中主动赋予app权限,可以选择允许,提示,禁止三种操作。
S407、未获得Root权限,执行失败,继续执行S4016;如果未获得Root权限则提示用户,并退出功能。根据本发明的一个优选实施方式,可设置友好提示,引导用户去放开权限。
S408、执行adb shell指令;创建一个shell命令行环境,在环境中执行一条形如“exec app_process库所在的路径库中实现功能的类名”的指令。命令行环境通过创建一个执行su的process(进程)来实现,然后在此shell进程中执行“exec app_process库所在的路径库中实现功能的类名”指令。在此过程中我们借助app_process工具执行了我们自定义的一个xxx.jar包文件,在xxx.jar包文件的main()方法中通过反射技术调用系统方法goToSleep()实现灭屏的功能。
具体的执行指令为“exec app_process库所在的路径库中实现功能的类名”。“库所在的路径”是指我们实现的java反射功能需要打包到一个xxx.jar库中,这个库存放在apk的assets目录下,在程序首次运行时,会将其解压缩到“/data/data/包名/files/”路径下,库所在的路径就是指的这个路径;“库中实现功能的类名”指的是执行反射注入键函数所在类的名称,它是一个全路径名称,包括了类所在包名,如实现类名定义为com.shere.common.powerkeyexecutor.KeyExecutor,表示这个类所在包为com.shere.common.powerkeyexecutor,类名为KeyExecutor,位于xxx.jar库中。“库所在的路径”和“库中实现功能的类名”都可以看做是在执行二进制文件app_process时,传递给它的两个参数。
另外,在执行之前需要设置执行的环境变量,在Android 4.0及以上版本使用export LD_LIBRARY_PATH进行设置,在Android 4.0以下版本使用export CLASSPATH进行设置。
S409、判断指令是否执行成功;此步骤主要依靠判断执行结果的返回值来进行处理,如果为true,表示命令执行成功,返回false,表示执行失败。当判断结果为否时,执行步骤S4010,当判断结果为是时,执行步骤S4011。
S4010、指令执行失败,继续执行S4016;shell指令执行失败,将退出程序,释放之前申请的资源,退出创建的shell进程等等,并提示用户出错的信息。
S4011、调用执行自定义的xxx.jar文件;shell指令执行成功,将启动预置到apk中的xxx.jar库文件,“xxx”表示名称可以随意取,根据本发明的一个优选实施方式,可定义名称为admob.jar。这个库存放在apk的assets目录下,在程序首次运行时,会将其解压缩到“/data/data/包名/files/”路径下。xxx.jar启动后,会首先触发xxx.jar文件中的main函数。
S4012、通过xxx.jar的main函数,执行实现类,反射调用系统方法goToSleep():xxx.jar库是实现灭屏功能的核心代码,通过执行xxx.jar,进而启动类KeyExecutor内部的main函数,再由main函数反射调用系统方法goToSleep()来启动系统的灭屏方法。由于此方法是一个系统方法,系统的实体电源键单击灭屏功能也是通过这个方法实现的,它要求执行者的权限比较高,因此是不对外开放的。对于第三方应用来说想正常调用是无法做到的,只有通过反射机制才能强制调用到。
S4013、判断方法是否执行成功,判断结果为否,则执行S4014,判断结果为是,则执行S4015;这里通过函数执行情况进行判断,未抛出异常说明执行成功。
S4014、提示执行失败,执行S4016;注入函数执行失败,则提示用户执行失败,然后退出。
S4015、实现灭屏功能;执行成功,系统会响应执行的系统按键功能。当点击灭屏键时,即实现灭屏功能。
S4016、退出:执行退出功能,此时可以选择关闭悬浮窗,也可以继续保留悬浮窗,继续执行其它按键功能。
根据本发明的一个优选实施方式,为了快速、便捷、随心所欲的操作灭屏功能,使用了悬浮按键和悬浮窗的技术,并且为了能够使悬浮按键和悬浮窗及时响应用户输入,启动了一个Service进程来进行管理,使应用程序不容易被系统或第三方杀死。参考图5说明悬浮按键和悬浮窗启动过程以及工作流程。
S501、启动程序;程序启动入口分三种情况,一种是程序刚刚安装成功,这时自动启动程序;第二种是终端已经安装了本程序,重新开机,收到系统开机广播或者其它常用的系统广播消息,如网络变化,开关蓝牙,GPS等等,将触发其自动启动运行;第三种是用户手动点击程序图标,启动程序。
S502、启动客户端进程;程序启动后首先运行客户端进程,此进程中包含了悬浮窗的所有设置功能以及其他一些辅助功能,如主题替换,设置功能项的开关,信息反馈,帮助,版本信息等内容。
S503、由客户端进程启动一个Android Service进程;通常具有两个进程,一个是客户端进程,一个是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、待机运行,继续监听按键事件,继续执行S509;按键功能执行完毕,保持悬浮窗显示,继续执行其它的功能。悬浮窗待机运行,继续监听按键事件。
S5013、退出悬浮窗,将其隐藏,展示悬浮按键;如果点击的位置不是悬浮窗上的某一个按键,而是点击空白处,则退出悬浮窗,将悬浮窗关闭,打开悬浮按键,返回S505;保持悬浮按键待机运行,继续监听悬浮按键的按键事件。只要不关机,悬浮按键可以一直悬浮显示,待机提供虚拟按键功能,达到系统按键同样的效果。
以上是悬浮按键和悬浮窗启动过程以及工作流程,以下将详细描述shell指令执行时的具体流程。在获得了Root权限,执行shell指令时,需要根据系统的版本设置不同的环境变量才能保证命令的执行环境正确,然后才能成功的执行shell指令,此指令需要分多步进行执行,并且需要始终运行在一个shell进程之中。具体执行流程如图6所示:
S601、执行su命令,创建一个shell进程;根据本发明的一个优选实施方式,使用如下java语句Runtime.getRuntime().exec("su"),创建一个shell进程,此进程的第一个命令为"su"。
S602、判断系统版本号是否为Android4.0以上的系统,当判断结果为是,则执行S603;当判断结果为否,则执行S604;根据本发明的一个优选实施方式,通过系统变量Build.VERSION.SDK_INT判断系统的版本号,比较其是否大于14。数字14对应Android4.0系统,即判断当前系统是不是Android4.0以上的系统。
S603、使用指令格式export LD_LIBRARY_PATH=xxx设置环境变量;根据本发明的一个优选实施方式,如果是Android4.0(包括4.0)以上的系统则使用如下指令“export LD_LIBRARY_PATH=/vendor/lib:/system/lib;exp ort CLASSPATH=/data/data/包名/files/admob.jar”设置环境变量,其中的“包名”表示使用当前应用的包名。
S604、使用指令格式export CLASSPATH==xxx设置环境变量;根据本发明的一个优选实施方式,如果是Android4.0以下系统,则使用如下指令“export CLASSPATH==/data/data/包名/files/admob.jar”设置环境变量,其中的“包名”表示使用当前应用的包名。
S605、执行命令“exec app_process库所在的路径库中实现功能的类名”;根据本发明的一个优选实施方式,执行一条“exec app_process库所在的路径库中实现功能的类名”这样的shell指令,“库所在的路径”是所实现的java反射功能需要打包到一个xxx.jar库中,这个库存放在apk的assets目录下,在程序首次运行时,会将其解压缩到“/data/data/包名/files/”路径下,库所在的路径就是指的这个路径;“库中实现功能的类名”指的是执行反射注入键函数所在类的名称,它是一个全路径名称,包括了类所在包名,如实现类名定义为com.shere.common.keyexecutor.KeyExecutor,表示这个类所在包为com.shere.common.keyexecutor,类名为KeyExecutor,位于xxx.jar库中。“库所在的路径”和“库中实现功能的类名”都可以看做是在执行二进制文件app_process时,传递给它的两个参数。
S606、判断指令是否执行成功,判断结果为否,则执行S607,如果判断结果为是,则执行S608;根据本发明的一个优选实施方式,可通过是否有异常来进行判断,如果没有异常反馈,可以判定命令执行成功。
S607、指令执行失败,执行S609;如果执行失败,则返回给上层一个false值。
S608、指令执行成功;如果执行成功,则返回给上层一个true值。
S609、退出,返回执行结果:返回执行的结果,上层收到返回值,根据返回值决定是否继续往下执行。
针对用户智能终端实体电源键在长时间使用后,按键失效或者不灵敏,导致无法灭屏,亮屏甚至无法开关机的问题,本发明设计和实现了一种解决的方法。首先,按压系统的实体电源键前提需要用户找到这个实体键,并且得用力按压才能起作用。而此发明以悬浮窗的形式来提供虚拟按键灭屏功能,可以起到按压实体电源键无法做到的一些好处,比如用户可以在任意界面快捷轻松的进行操作,只需轻轻点击一下即可,方便快捷。其次,本方法可以解决几乎所有Root终端用户实体电源键按键不好用的问题,“虚拟”实现了灭屏按键功能,减少按压实体电源键带来的对电源键的损伤,延长了实体电源键的寿命。并且解决了用户在实体电源键按键不好用时,使用本发明来代替实体电源键进行灭屏,避免了其只能去换屏幕或者换终端的难题,减少了用户的金钱损失。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
Claims (10)
1.一种利用JAVA反射机制进行灭屏的方法,其特征在于,包括以下步骤:
S401、开始,点击悬浮按键;
S402、展开悬浮窗,点击悬浮窗上的灭屏功能按键;
S403、判断终端是否Root;如果判断结果为否,则执行S404,如果判断结果为是,则执行S405;
S404、提示终端未Root,无法使用此功能,继续执行S4016;
S405、提取虚拟功能按键要实现哪一种系统实体键;
S406、申请Root权限,系统提示是否赋予该app权限,当Root权限申请成功后执行S408,当Root权限申请不成功则执行S407;
S407、未获得Root权限,执行失败,继续执行S4016;
S408、执行adb shell指令;
S409、判断指令是否执行成功;当判断结果为否时,执行步骤S4010,当判断结果为是时,执行步骤S4011;
S4010、指令执行失败,继续执行S4016;
S4011、调用执行自定义的xxx.jar文件;
S4012、通过xxx.jar的main函数,执行实现类,反射调用系统方法goToSleep();
S4013、判断方法是否执行成功,判断结果为否,则执行S4014,判断结果为是,则执行S4015;
S4014、提示执行失败,执行S4016;
S4015、实现灭屏功能;
S4016、退出:执行退出功能,此时可以选择关闭悬浮窗,也可以继续保留悬浮窗,继续执行其它按键功能。
2.如权利要求1所述的利用JAVA反射机制进行灭屏的方法,其特征在于:
点击悬浮按键后悬浮窗将会被展开,同时悬浮按键进行隐藏;悬浮窗关闭后,悬浮按键显示出来。
3.如权利要求1或2所述的利用JAVA反射机制进行灭屏的方法,其特征在于:
判断终端是否Root具体为:检测/system/bin/,/system/xbin/,/sbin/,/system/sd/xbin/,/data/local/xbin/,/data/local/bin/目录是否存在su文件;或者在shell指令里执行“su”,在返回的输出系统中执行打印指令,如果返回成功,则代表Root成功。
4.如权利要求1-3任一所述的利用JAVA反射机制进行灭屏的方法,其特征在于:
在创建的shell命令行环境中执行“exec app_process库所在的路径库中实现功能的类名”指令,接着再将之前生成的action和code拼接成字符串传给此进程执行。
5.如权利要求1-4任一所述的利用JAVA反射机制进行灭屏的方法,其特征在于:
在执行之前需要设置执行的环境变量,在Android 4.0及以上版本使用export LD_LIBRARY_PATH进行设置,在Android 4.0以下版本使用exportCLASSPATH进行设置。
6.如权利要求1-5任一所述的利用JAVA反射机制进行灭屏的方法,悬浮按键和悬浮窗启动过程及工作流程如下:
S501、启动程序;
S502、启动客户端进程;此进程中包含了悬浮窗的所有设置功能;
S503、由客户端进程启动一个Android Service进程;
S504、在Service进程中分别创建悬浮按键和悬浮窗;
S505、Service进程在后台一直保持运行,显示悬浮按键,隐藏悬浮窗;
S506、判断是否点击悬浮按键;如果判断结果为否,则执行S507;如果判断结果为是,则执行S508;
S507、待机运行,继续监听按键事件,返回至S505;如果没有点击事件发生,悬浮按键将保持待机运行,直到监听到按键事件;
S508、显示悬浮窗,隐藏悬浮按键;收到点击事件,将悬浮按键隐藏,并实现悬浮窗;
S509、展示悬浮窗支持的各种按键功能;
S5010、点击屏幕,判断点击的位置是否是悬浮窗上的虚拟功能键;如果判断为是,则执行S5011;如果判断为否,则执行S5013;
S5011、执行对应的功能;
S5012、待机运行,继续监听按键事件,继续执行S509;按键功能执行完毕,保持悬浮窗显示,继续执行其它的功能;
S5013、退出悬浮窗,将其隐藏,展示悬浮按键;如果点击的位置不是悬浮窗上的某一个按键,而是点击空白处,则退出悬浮窗,将悬浮窗关闭,打开悬浮按键,返回S505;保持悬浮按键待机运行,继续监听悬浮按键的按键事件。
7.如权利要求6所述的利用JAVA反射机制进行灭屏的方法,其特征在于:
悬浮按键和悬浮窗都是通过系统的窗口管理器提供的addView方法在系统界面管理器中添加一个窗口,并将此新加的窗口的优先级设置为TYPE_SYSTEM_ALERT级别。
8.如权利要求1-7任一所述的利用JAVA反射机制进行灭屏的方法,创建shell执行环境具体如下:
S601、执行su命令,创建一个shell进程;
S602、判断系统版本号是否为Android4.0以上的系统,当判断结果为是,则执行S603;当判断结果为否,则执行S604;
S603、使用指令格式export LD_LIBRARY_PATH=xxx设置环境变量;
S604、使用指令格式export CLASSPATH==xxx设置环境变量;
S605、执行命令“exec app_process库所在的路径库中实现功能的类名”;
S606、判断指令是否执行成功,判断结果为否,则执行S607,如果判断结果为是,则执行S608;
S607、指令执行失败,执行S609;如果执行失败,则返回给上层一个false值;
S608、指令执行成功;如果执行成功,则返回给上层一个true值;
S609、退出,返回执行结果。
9.如权利要求7-8任一所述的利用JAVA反射机制进行灭屏的方法,其特征在于:
如果是Android4.0以上的系统则使用如下指令“export LD_LIBRARY_PATH=/vendor/lib:/system/lib;export CLASSPATH=/data/data/包名/files/admob.jar”设置环境变量,其中的包名表示使用当前应用的包名;如果是Android4.0以下系统,则使用如下指令“export CLASSPATH==/data/data/包名/files/admob.jar”设置环境变量,其中的包名表示使用当前应用的包名。
10.如权利要求7-9任一所述的利用JAVA反射机制进行灭屏的方法,其中执行一条“exec app_process库所在的路径库中实现功能的类名”的shell指令,“库所在的路径”是所实现的java反射功能需要打包到一个xxx.jar库中,这个库存放在apk的assets目录下,在程序首次运行时,会将其解压缩到“/data/data/包名/files/”路径下,库所在的路径就是指的这个路径;“库中实现功能的类名”指的是执行反射注入键函数所在类的名称,它是一个全路径名称,包括了类所在包名,如实现类名定义为com.shere.common.keyexecutor.KeyExecutor,表示这个类所在包为com.shere.common.keyexecutor,类名为KeyExecutor,位于xxx.jar库中;其中“库所在的路径”和“库中实现功能的类名”是在执行二进制文件app_process时,传递给它的两个参数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711021968.2A CN107704304A (zh) | 2017-10-26 | 2017-10-26 | 一种利用java反射机制进行灭屏的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711021968.2A CN107704304A (zh) | 2017-10-26 | 2017-10-26 | 一种利用java反射机制进行灭屏的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107704304A true CN107704304A (zh) | 2018-02-16 |
Family
ID=61183185
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711021968.2A Pending CN107704304A (zh) | 2017-10-26 | 2017-10-26 | 一种利用java反射机制进行灭屏的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107704304A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113476841A (zh) * | 2021-06-30 | 2021-10-08 | 杭州闪电玩网络科技有限公司 | 一种游戏界面的显示方法、系统和电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100253693A1 (en) * | 2009-04-01 | 2010-10-07 | Qnx Software Systems Gmbh & Co. Kg | System for accelerating composite graphics rendering |
CN105739847A (zh) * | 2014-12-11 | 2016-07-06 | 富泰华工业(深圳)有限公司 | 智能电子装置、智能电子装置唤醒屏幕的系统与方法 |
CN105824527A (zh) * | 2016-02-29 | 2016-08-03 | 维沃移动通信有限公司 | 一种灭屏方法及移动终端 |
CN106371752A (zh) * | 2016-08-30 | 2017-02-01 | 竞技世界(北京)网络技术有限公司 | 一种安卓系统智能终端的虚拟按键实现方法及装置 |
-
2017
- 2017-10-26 CN CN201711021968.2A patent/CN107704304A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100253693A1 (en) * | 2009-04-01 | 2010-10-07 | Qnx Software Systems Gmbh & Co. Kg | System for accelerating composite graphics rendering |
CN105739847A (zh) * | 2014-12-11 | 2016-07-06 | 富泰华工业(深圳)有限公司 | 智能电子装置、智能电子装置唤醒屏幕的系统与方法 |
CN105824527A (zh) * | 2016-02-29 | 2016-08-03 | 维沃移动通信有限公司 | 一种灭屏方法及移动终端 |
CN106371752A (zh) * | 2016-08-30 | 2017-02-01 | 竞技世界(北京)网络技术有限公司 | 一种安卓系统智能终端的虚拟按键实现方法及装置 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113476841A (zh) * | 2021-06-30 | 2021-10-08 | 杭州闪电玩网络科技有限公司 | 一种游戏界面的显示方法、系统和电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106371752B (zh) | 一种安卓系统智能终端的虚拟按键实现方法及装置 | |
AU2013389985B2 (en) | User interface elements for multiple displays | |
CN107765972A (zh) | 一种安卓终端截屏方法 | |
CN103699398B (zh) | 终端设备及其启动控制方法 | |
US8504930B1 (en) | User interface substitution | |
EP4206883A1 (en) | Permission setting method and apparatus and electronic device | |
JP2015523648A (ja) | ユーザインタフェース管理方法、ユーザインタフェース管理装置、プログラム及び記録媒体 | |
JPH1091413A (ja) | コンピュータ・システムにおける操作の選択装置及び方法 | |
CN103294398A (zh) | 基于悬浮式虚拟窗口操控显示终端的方法和装置 | |
CN104050417A (zh) | 一种在移动终端对软件状态进行检测的方法及装置 | |
CN104765802B (zh) | 网页页面展示方法和装置 | |
JP2012226726A (ja) | Biosを設定するための接触制御方法およびその方法を用いたコンピュータ・システム | |
CN106569932B (zh) | 控制应用程序开启的方法及装置 | |
WO2022156663A1 (zh) | 应用程序管理方法、装置及电子设备 | |
CN103257788A (zh) | 一种windows桌面动态图标形成方法 | |
CN113448651B (zh) | 一种应用单例功能的实现方法和装置 | |
CN107704304A (zh) | 一种利用java反射机制进行灭屏的方法 | |
EP1025489B1 (en) | System to associate control with applications using drag and drop interface | |
US20150186038A1 (en) | Terminal and terminal control method | |
TW201514838A (zh) | 電子裝置的操作方法 | |
CN107728888B (zh) | 一种安卓终端虚拟按键实现方法 | |
WO2022247782A1 (zh) | 程序控制方法、装置、电子设备和可读存储介质 | |
CN107077577A (zh) | 一种应用程序启动方法及装置 | |
CN107807835A (zh) | 一种利用java反射机制进行截屏的方法 | |
CN115454296A (zh) | 一种跨运行环境的用户行为智能融合方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180216 |