CN107357580B - 一种引导终端用户打开应用的辅助功能权限的方法 - Google Patents

一种引导终端用户打开应用的辅助功能权限的方法 Download PDF

Info

Publication number
CN107357580B
CN107357580B CN201710543502.2A CN201710543502A CN107357580B CN 107357580 B CN107357580 B CN 107357580B CN 201710543502 A CN201710543502 A CN 201710543502A CN 107357580 B CN107357580 B CN 107357580B
Authority
CN
China
Prior art keywords
auxiliary function
service
function service
authority
user
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.)
Active
Application number
CN201710543502.2A
Other languages
English (en)
Other versions
CN107357580A (zh
Inventor
肖剑锋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jjworld Beijing Network Technology Co ltd
Original Assignee
Jjworld Beijing Network Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Jjworld Beijing Network Technology Co ltd filed Critical Jjworld Beijing Network Technology Co ltd
Priority to CN201710543502.2A priority Critical patent/CN107357580B/zh
Publication of CN107357580A publication Critical patent/CN107357580A/zh
Application granted granted Critical
Publication of CN107357580B publication Critical patent/CN107357580B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4406Loading of operating system
    • G06F9/4408Boot device selection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04MTELEPHONIC COMMUNICATION
    • H04M1/00Substation equipment, e.g. for use by subscribers
    • H04M1/72Mobile telephones; Cordless telephones, i.e. devices for establishing wireless links to base stations without route selection
    • H04M1/724User interfaces specially adapted for cordless or mobile telephones
    • H04M1/72448User interfaces specially adapted for cordless or mobile telephones with means for adapting the functionality of the device according to specific conditions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04MTELEPHONIC COMMUNICATION
    • H04M1/00Substation equipment, e.g. for use by subscribers
    • H04M1/72Mobile telephones; Cordless telephones, i.e. devices for establishing wireless links to base stations without route selection
    • H04M1/724User interfaces specially adapted for cordless or mobile telephones
    • H04M1/72448User interfaces specially adapted for cordless or mobile telephones with means for adapting the functionality of the device according to specific conditions
    • H04M1/72454User interfaces specially adapted for cordless or mobile telephones with means for adapting the functionality of the device according to specific conditions according to context-related or environment-related conditions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04MTELEPHONIC COMMUNICATION
    • H04M1/00Substation equipment, e.g. for use by subscribers
    • H04M1/72Mobile telephones; Cordless telephones, i.e. devices for establishing wireless links to base stations without route selection
    • H04M1/724User interfaces specially adapted for cordless or mobile telephones
    • H04M1/72469User interfaces specially adapted for cordless or mobile telephones for operating the device by selecting functions from two or more displayed items, e.g. menus or icons

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Theoretical Computer Science (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Environmental & Geological Engineering (AREA)
  • Stored Programmes (AREA)
  • Telephone Function (AREA)

Abstract

一种引导终端用户打开应用的辅助功能权限的方法,在应用程序需要使用辅助功能来实现特殊目的时,而当前应用程序没有此功能的使用权限时,通过开启一个引导框,然后用户根据引导框的提示,点击其上设置有去设置文字标识的按钮后,自动调出系统的辅助功能设置界面,由用户打开相应应用的辅助功能服务的方法。

Description

一种引导终端用户打开应用的辅助功能权限的方法
技术领域
本发明涉及智能终端引导技术领域,具体涉及一种引导终端用户打开应用的辅助功能权限的方法。
背景技术
目前部分Android终端用户由于自身原因导致其要以不同寻常的方式与手机交互,这些用户可能是自身条件所限,比如其可能在视力上,身体上存在缺陷,或年龄上的问题致使其不能看到完整的屏幕内容,或者无法使用触屏,或听力能力比较弱,可能无法很好的接收到语音信息和提示。因此,这样的用户在使用手机时就会出现各种各样的问题,从而不能很方便的使用到手机提供的各种功能或服务。而Android提供的Accessibility(辅助)功能服务就是旨在帮助这些用户,使其能够更加简单地操作设备,这些功能包括但不限于文字转化成语音,触觉反馈,手势操作,轨迹球和手柄操作等功能。而开发者可以利用这些服务使得自己的程序更好用,更人性化,使那些自身条件所限的用户可以更方便的使用和操作手机。
而开发者通过搭建自己的Accessibility(辅助)功能服务,可以实现很多特殊的、扩展的应用程序功能,例如声音提示,物理反馈,和其他特殊的操作功能。随着Android版本的不断升级,Android Accessibility(辅助)功能服务也越来越强大,Android 4.1.2以及以前版本,系统辅助功能服务比较单一,仅仅只能单向获取窗口元素信息,比如,获取输入框中用户输入的内容。到Android 4.1.2版本以后,系统辅助功能服务增加了与窗口元素的双向交互,此时可以通过辅助功能服务操作窗口元素,比如点击按钮等,而不是之前的仅仅获取窗口元素。除了以上介绍的外,借助辅助功能服务还可以实现一些特殊功能,比如,调用系统最近任务,接收通知,模拟实现系统返回键和关机键等功能。
如上所述,借助系统的辅助功能服务可以实现这么多有用的扩展功能,它有如此多的优点,对于开发者来说就应该好好利用它,将其功能发挥到最大化,为用户提供体验度更好的应用。但有些Android智能终端机型却将此功能给删减掉了,或者把这个服务给屏蔽了,没有对外开放出接口来。另一方面,众所周知,国内品牌金立系列手机,虽然这样的机型并不多,但毕竟存在。还有一些系统版本是不支持的或者支持的很少,基本可以忽略,如Android4.1.2及以前版本的版本。而对于Android4.1.2以后版本的系统机型,大部分辅助功能虽然都支持,但系统默认是不给应用程序使用权限的,需要由用户手动开启,才能使应用获得辅助功能服务使用权限。所以应用程序虽然已安装了,但是点击运行后由于辅助功能服务并未开启,对应的应用功能还是不起作用,最终导致程序无法正常使用。因此需要想办法让用户能够方便,舒服,快捷的开启此应用的辅助功能服务权限,并且告知用户开启后并不影响手机的使用,也不会引起手机安全方面的问题,更不会导致手机变慢或卡顿,相反它会给手机带来很多的便利,可以帮助用户达到使用某些特殊功能的效果。不至于用户在需要开启此服务时,不知道辅助功能服务为何物,不知道怎样找到辅助功能设置界面,以及打开后会不会有其它副作用等一系列的疑问而不能开启。
由此可知,借助系统的辅助功能可以实现很多实用的功能,可以为用户带来更多的方便和快捷,但由于它需要开启应用的辅助功能权限才能使用,而系统默认都是不给予应用权限的,需要用户手动开启开关才能赋予应用权限,并且有些智能终端也不支持,如Android4.1.2以下版本系统的机型,因此就会导致应用由于权限的问题而无法正常使用。在启动这样的应用程序时,往往会启动失败,而用户又不知道是由于辅助功能服务权限导致的问题,或者即使知道了原因,但需要开启权限,却不知道到哪里去开启这个权限,最终导致用户失去耐心,不再使用这个应用或者将应用卸载。而如果应用在遇到此类情况时,能够做到自动引导用户来开启这个权限,告诉用户只有开启此权限才能使用此应用,并且自动跳转到开启权限的界面,在其上弹出一个显示用户如何开启权限步骤的半透明的窗口,引导用户依据步骤操作,从而开启辅助功能服务权限,达到应用可以正常运行的目的。这样做的优点在于,用户了解了权限的重要性和必要性,并且由程序自动控制进行界面跳转,用户只需浏览引导信息,依据引导点击开关即可,无需自己去查找开启的界面在哪里,这样应用将会显得很智能,用户体验也会变得很好,这样的功能也将会受到用户的青睐和喜爱。
专利公开号为CN104238880A且专利名称为“应用程序界面操作的引导方法、引导装置及移动终端”的中国专利的技术方案的实施例公开了一种应用程序界面操作的引导方法、引导装置及移动终端,涉及应用程序的界面交互技术领域,方便用户对另一应用程序的界面进行操作,并能提高操作效率,其应用程序界面操作的引导方法,包括:将所述当前应用程序切换到另一应用程序的指定界面;确定所述另一应用程序的指定界面已在前台显示后,则通知操作系统将预先自定义的Toast覆盖在所述另一应用程序的指定界面上;在所述Toast覆盖在所述另一应用程序的指定界面上之后,在所述Toast中播放引导动画以引导用户操作,其适用于跨应用程序的界面操作,这是一种在当前应用程序界面,如何快捷的操作另一个应用程序界面的引导方法,此方法为快速切换操作另一个应用界面提供了便利性。这个方法的具体步骤是,在当前应用程序界面切换到另一个应用程序的指定界面,然后在确定这个界面在前台显示后,再调用自定义的Toast覆盖到另一个应用程序的界面之上,接着利用Toast来播放引导动画,引导用户进行下一步的操作,如图1所示,此方法的优点是,它可以直接在当前界面之上弹出需要进行设置的界面,设置完成后,将其退出,继续应用的下一个步骤,这样解决了用户在当前界面想操作另一个界面时,需要先退出当前界面,然后从桌面中或者其它菜单位置选择需要操作的另一个应用程序,接着找到需要设置的界面进行设置,最后再返回到原来的应用继续进行下一步操作这样一个复杂、费时的操作逻辑。但它也存在缺陷,使用Toast的方式提醒用户是有问题的,因为Android系统中的Toast播放都是在2-3秒之内就完成了,所以时间会很短,不能在这个时间段内提供给用户足够多的信息。另外,使用引导动画的方式将比较耗费系统的资源,并会增加程序出错的风险。而如果使用文本展示的方式可能会比动画更精炼,简洁一些,并且如果将Toast替换成一个窗口的方式将使展示的内容会更多,存活的时间也会更长,使用户体验也更人性化一些,另外,该方法并未指出不同系统智能终端的处理方式,它们是否相同,以及如何区分不同的智能终端,应用如何检测另一个应用已经在前台显示以及另一个应用不能在前台显示后的处理逻辑是什么样的等。所以此方案虽然是一个界面引导方法的发明,但不能解决上述提出的问题,比如,在Android4.1.2以上版本的大多数机型中,当系统预置有辅助功能权限并且系统默认不给予用户的应用辅助功能服务使用权限,而用户的应用必须使用此权限时,就会出现应用无法正常运行的问题。因此此发明强调的是便利性,而在解决便利性的同时,还得强调必须性,否则应用将无法正常运行或出现无响应的问题,最终无法使用应用的功能。
综上所述,现有技术主要有四个缺点,具体如下:
一是当前应用所要启动的另一应用程序往往是一些比较特殊的权限设置界面,只有开启了这个权限开关后程序才能继续往下运行,而这样的权限管理应用并不是所有系统版本都支持的。而且对于不同的系统版本,跳转到的界面路径也是不同的,现有技术没有指出其所用的版本在不同的系统上如何处理,而且在不同的厂商的智能终端上表现形式以及方法都有可能不同,当这些不同的条件出现时,如何进行处理包括公开的该专利的现有技术并未指出;
二是跳转到另一个应用的前提并没有指明。程序是在何种情况下,什么条件下需要跳转的都没有指明,比如,程序是运行在所有设备中时,还是只在某些特殊的设备上运行时,如果应用已经具备了所需要的条件,跳转有无必要都没有指示清楚;
三是引导中使用Toast的方式,会导致展示信息时间不充分,因为Toast实际展示只有最多不到4秒的时间;
四是使用动画的方式引导用户比较耗费系统资源,并会增加程序复杂度,增大程序出错的风险。
也就是说,现有技术从当前应用程序界面切换到另一个应用程序的指定界面,然后在确定这个界面显示到前台后,再调用自定义的Toast覆盖到另一个应用程序的界面之上,接着利用Toast来播放引导动画,引导用户进行下一步的操作。这个方法无法解决“不是所有机型都支持辅助功能”的问题,目前知道的是Android4.1.2以下版本系统可以看作不支持(虽然有些很简单的辅助功能,但默认实现的功能很少),还有一些品牌机型厂商不支持,如金立等品牌机型厂商就不支持。所以需要把不支持的“某些特殊机型”和其他支持的机型区分开,而这个问题现有技术的方案就无法做到。现有技术的方案也未提供如何判断应用是否具有获取到辅助功能使用权限的方法,只有在没有获取到此权限时,才有必要引导用户跳到辅助功能权限管理界面进行开启。而在应用具有这个权限后,此引导流程是不需要执行的。最后,此方案使用了Toast以及动画的方式展示信息,也存在一定的问题,首先Toast时间比较短,其次使用动画会耗费系统过多的资源,如内存,另外,动画也会增加程序的复杂度,带来更多的风险。
发明内容
为解决上述问题,本发明提供了一种引导终端用户打开应用的辅助功能权限的方法,在应用程序需要使用辅助功能来实现特殊目的时,而当前应用程序没有此功能的使用权限时,通过开启一个引导框,然后用户根据引导框的提示,点击其上设置有去设置文字标识的按钮后,自动调出系统的辅助功能设置界面,由用户打开相应应用的辅助功能服务的方法。
为了克服现有技术中的不足,本发明提供了一种引导终端用户打开应用的辅助功能权限的方法的解决方案,具体如下:
一种引导终端用户打开应用的辅助功能权限的方法,包括如下步骤:
本发明提供了详细的通过排除某些特殊机型,根据应用是否已经获取到了辅助功能服务权限,从而决定是否弹出引导框,来引导用户开启辅助功能服务权限的引导流程,其实现的步骤如下:
S501:应用程序启动,即为:启动Android移动终端中的应用程序,该应用程序是具有借助系统辅助功能服务实现的应用程序;
S502:用户启动借助辅助功能服务实现的功能模块;
S503:进入排除机型检测流程,即为:借助辅助功能服务实现的功能模块进入到排除机型检测流程中,在其中判断当前Android移动终端的机型是否属于排除机型,排除机型和非排除机型采用不同的处理流程;
S504:判断当前机型是否为程序预先排除机型,即为:根据排除机型检测流程的返回值确定当前机型是否是排除机型,进而决定是进行辅助功能服务权限引导,还是直接跳过引导流程;
S505:若是属于排除机型,就不支持而进入程序其它功能处理流程,即为:若排除机型检测流程的返回的返回值为true或是,表示当前Android移动终端的机型是排除机型而Android移动终端的系统不支持辅助功能服务,程序进入到其他功能处理流程;
S506:进入判断当前设备是否已经获取辅助功能服务权限的检测流程,即为:若排除机型检测流程的返回的返回值为false或否,表示当前Android移动终端的机型不是排除机型而Android移动终端的系统支持辅助功能服务。然后进入辅助功能服务权限的检测子流程,判断当前所述应用程序是否已经获取到了辅助功能服务权限,将在其中判断当前所述应用程序是否已经获取到了权限,获取到权限或未获取到权限分别采用不同的处理流程;
S507:判断当前所述应用程序是否已经获取到辅助功能服务权限,即为:根据辅助功能服务权限的检测子流程的返回值,判断当前所述应用程序的辅助功能服务权限是否开启了,如果已经开启,跳过权限开启引导流程,如果未开启,则进入引导流程,引导用户开启;
S5008:已经获取到权限而直接执行借助权限实现的功能,即为:如果辅助功能服务权限的检测子流程返回的返回值为true或是,说明当前所述应用程序的辅助功能服务权限已经开启,那就跳过引导流程,直接执行借助权限实现的功能;
S5009:启动一个引导框而引导用户如何开启辅助功能服务权限,即为:如果辅助功能服务权限的检测子流程返回的返回值为false或否,说明当前所述应用程序的辅助功能服务权限未开启,则启动一个引导窗口;
S5010:执行步骤S5011按照引导窗口的提示信息点击指定按钮跳转到开启辅助功能服务权限界面;
S5011:判断用户是否选择了设置有去设置文字标识的按钮,即为:用户在引导窗口界面进行选择,选项包括设置有取消文字标识的按钮和设置有去设置文字标识的按钮,如果选择设置有取消文字标识的按钮将执行步骤S5012来退出当前引导窗口,借助辅助功能服务实现的功能将无法实现;如果选择设置有去设置文字标识的按钮,就执行步骤S5013使得辅助功能服务实现的功能模块跳转到辅助功能服务权限开启界面,然后用户在此界面进行权限开启操作,也就是执行借助权限实现的功能;
S5012:用户选择了设置有取消文字标识的按钮就退出引导窗口来让此功能结束,即为:如果用户在当前的引导窗口界面选择了设置有取消文字标识的按钮,辅助功能服务实现的功能模块将退出引导窗口,利用辅助功能服务实现的功能将无法实现,功能到此结束;
S5013:跳转到辅助功能服务权限开启界面等待用户进一步操作,即为:如果辅助功能服务实现的功能模块跳转到检测到用户点击了设置有去设置文字标识的按钮,将首先定义一个动作类型为
Settings.ACTION_ACCESSIBILITY_SETTINGS
的Intent,所述Settings.ACTION_ACCESSIBILITY_SETTINGS为设置模块中的一个字符串常量值,代表这是一个启动辅助功能服务的动作,然后使用上下文Context的启动界面startActivity方法启动这个Intent,这样就可以将Android移动终端的系统的辅助功能服务权限开启界面开启,用户进入到这个界面后,就可以开启应用对应的辅助功能服务权限了;
S5014:执行步骤5015判断用户是否退出此界面,而辅助功能服务权限开启界面是Android移动终端的系统对外提供的一个可以供用户开启某个应用权限的界面,此界面将列出Android移动终端的系统中所有使用了辅助功能服务的应用,并且每个应用将对应一个开关;
S5015:用户选择了取消键代表退出该开启界面使得此功能结束,即为:辅助功能服务权限开启界面上设置有退出键或取消键,如果用户在辅助功能服务权限开启界面选择了退出键或者取消键,辅助功能服务实现的功能模块将退出此界面,借助辅助功能服务实现的功能将到此结束;
S5016:用户在此权限开启界面自行找到要开启的应用然后点击对应的应用开关而弹出一个系统权限提示框,即为:如果用户并未退出此权限开启界面,而是在此权限开启界面中找到了要开启权限的应用,并且点击了对应的开关按钮,系统将弹出一个系统级别的权限提示框,提示框将提醒用户,此应用将使用系统的哪一类服务,提示用户确定是否真的开启;
S5017:判断用户是否点击确定按钮,即为:选择确定按钮将开启此应用的辅助功能服务权限,选择取消按钮将退回到所述权限开启界面,然后用户能够重新进行选择,或者进行其他应用的权限开启;
S5018:应用成功获取到辅助功能服务权限使得下次再使用此功能时将生效,即为:开启此应用的辅助功能服务权限后,应用程序将可以借助此权限实现需要借助辅助功能服务实现的功能;
S5019:程序执行完毕,即为:引导用户获取辅助功能服务权限的辅助功能服务实现的功能模块结束,辅助功能服务实现的功能模块执行完毕。
S5020:应用进入待机状态,即为;应用程序进入待机状态,如果用户获取到了所述权限,下次运行时将直接执行对应的功能;
在所述排除机型检测流程中判断当前Android移动终端的机型是否属于排除机型的步骤如下所示,
S601:进入排除机型检测流程,即为:进入排除机型检测流程;
S602:获取机型的品牌信息,即为:首先通过Android移动终端的系统自带的字符串常量Build.BRAND来进行判断机型,也就获取了机型的品牌信息,这个常量代表了机型的品牌信息;
S603:判断此品牌是否为需要特殊处理的机型,即为:通过得到的字符串常量Build.BRAND来判断Android移动终端属于哪一类特殊处理的机型,若为特殊处理的机型,就判断该Android移动终端的机型为排除机型;
S604:判断当前机型的系统版本信息是否是需要排除的版本,即为:若此品牌不为需要特殊处理的机型,Android移动终端的系统自带的Build.VERSION.SDK_INT获取Android移动终端的系统的版本号,Build.VERSION.SDK_INT是一个整型的常量值,代表系统版本号,判断该系统版本号Build.VERSION.SDK_INT是否大于等于16,如果大于等于16,属于非排除机型;如果小于16,代表是Android4.1.2以下的系统,认为系统是没有辅助功能服务的,属于排除机型,16表示当前的系统版本为Android4.1.2,即判断当前系统版本是否为Android4.1.2及以上版本的系统;
S605:结束判断确定当前为非排除机型就返回false,即为:经过检测Android移动终端的机型不属于排除机型,跳出检测,返回false或否;
S606:当前机型是排除机型就跳出检测就返回true,即为:如果Android移动终端的机型属于排除机型,需要特殊处理,则跳出检测,返回true或是;
S607:结束排除机型检测流程,即为:终止排除机型检测流程,将返回值传递回去。
所述辅助功能服务权限的检测子流程进行的辅助功能服务权限是否开启的检测流程,具体步骤如下,
S701:进入辅助功能服务权限是否开启检测流程,即为:辅助功能服务权限的检测子流程进入辅助功能服务权限是否开启检测流程需要对当前的应用程序进行检测,判断其是否已经获取到了辅助功能服务使用权;
S702:创建一个继承了辅助功能服务AccessibilityService的类,此类在应用获取到辅助功能服务权限后,负责实现特殊的功能,即为:要使用系统的辅助功能服务,首先需要应用程序创建一个继承了辅助功能服务AccessibilityService的类,然后将此类注册到系统的辅助功能服务列表中,最后再启动此服务;
S703:获取当前应用的包名,和继承了辅助功能服务AccessibilityService的类的类名,即为:通过上下文Context变量的—获取包名称getPackageName方法可以获取到当前应用的包名,通过Java类的.class属性得到当前对应的类,然后通过其—获取名称getName()方法进一步得到继承了辅助功能服务AccessibilityService类的类名;
S704:将包名和类名组合成特殊格式的字符串,形如“包名/类名”这样的格式,即为:将上一个步骤中得到的包名,以及获得的继承了辅助功能服务AccessibilityService类的类名,组合成特殊格式的字符串,形如“包名/类名”这样的格式;
S705:获取系统的辅助功能服务管理器AccessibilityManager,然后调用管理器自带的—获取系统可用的服务列表getEnabledAccessibilityServiceList方法,获取系统当前授权的辅助功能服务列表,即为:通过上下文context的—获取系统服务getSystemService(Context.ACCESSIBILITY_SERVICE)方法获取系统的辅助功能服务管理器AccessibilityManager,然后调用管理器自带的--获取系统可用的服务列表getEnabledAccessibilityServiceList方法,获取系统当前授权的辅助功能服务列表List<AccessibilityServiceInfo>,此列表是一个元素为AccessibilityServiceInfo的列表,每一元素存储了一个应用的辅助功能服务信息;
S706:轮询列表List<AccessibilityServiceInfo>中的每个元素,调用每个元素的getId()方法,得到一个特殊的字符串,此字符串代表一个获取了辅助功能服务权限的服务,即为:使用for循环开始轮询列表List<AccessibilityServiceInfo>中的每个元素,然后调用每个元素的getId()方法,得到一个特殊的字符串,此字符串也是一个形如“包名/类名”这样格式的字符串,代表一个获取了辅助功能服务权限的服务;
S707:依次判断此字符串是否等于之前当前应用组合的“包名/类名”,即为:利用轮询,依次判断列表中的每个元素是否等于之前当前应用组合而成的“包名/类名”这样的字符串;
S708:判断字符串是否相等,即为:判断上一步中指定的两个形如“包名/类名”这样的字符串的结果是不是相等;
S709:是否是列表的最后一个元素,即为:如果两个字符串不相等,则去判断从列表List<AccessibilityServiceInfo>中取出的元素是不是列表中的最后一个元素,如果不是,则返回到步骤S706,取下一个元素继续进行轮询;
S7010:轮询期间有无异常发生,即为:如果上一步中指定的两个形如“包名/类名”这样的字符串的结果是相等的,则判断以上步骤S705-S709过程中是否出现了异常情况。需要使用try—catch进行包装,判断这个过程是否有异常发生,如果一旦抛出异常,直接返回false或否,并退出所述辅助功能服务权限的检测子流程;
S7011:此时确定当前应用已经获取到辅助功能服务权限,即为:如果字符串相等,并且未发生异常情况,此时可以确定当前应用程序已经获取到辅助功能服务权限;
S7012:返回true或是表示当前应用有权限,即为:确定应用程序具有辅助功能服务权限,则返回true或是;
S7013:返回false或否表示当前应用无权限,即为:确定应用程序不具有辅助功能服务权限,则返回false或否;
S7014:退出辅助功能服务权限是否开启检测流程,即为:退出辅助功能服务权限的检测子流程,并将检测的返回值返回。
本发明实现了在Android系统设备上,启动具有辅助功能的应用时,通过判读是否为排除机型,以及是否具有辅助功能服务使用权限等检测结果,自动引导用户进行辅助功能权限开启的方法,从而为借助辅助功能服务实现了某些特殊功能的应用在Android设备上能够顺利运行提供了一套解决方案。
附图说明
图1为现有技术实施例的流程图;
图2为android智能终端上模拟实现系统的虚拟返回键的界面示意图;
图3为针对模拟实现系统的虚拟返回键的引导窗口;
图4为针对模拟实现系统的列表界面;
图5为本发明的主流程图。
图6为本发明的排除机型检测流程的流程图。
图7为本发明的所述辅助功能服务权限的检测子流程的流程图。
具体实施方式
此发明就是用于解决应用无法获取系统的辅助功能服务而导致不能正常运行,而用户又不知道如何开启,开启后担心是否有其它副作用这样的问题。在此发明中,将开启流程进行自动化处理,将辅助功能服务设置界面通过应用程序启动Activity的方式直接调用跳转出来,然后通过引导框指示以及框中的引导文字,使用户了解辅助功能服务的作用,打消用户的疑虑,然后引导用户方便,快捷的开启辅助功能服务权限的一种方法。
下面将结合实施例对本发明做进一步地说明。
如图2-图7所示,本实施例的引导终端用户打开应用的辅助功能权限的方法,引导终端用户打开应用的辅助功能权限的方法,包括如下步骤:
以使用系统辅助功能服务来模拟实现系统的虚拟返回键为例,如图2所示,在展开的悬浮窗中,白框标识中的返回按键功能。这个返回按键功能是借助了系统的辅助功能实现的,利用了辅助功能服务AccessibilityService中的执行全局动作方法performGlobalAction(GLOBAL_ACTION_BACK)方法来模拟实现了返回键的功能。通过此方法模拟实现的虚拟返回键,可以大大节省系统实体返回按键的使用,从而延长手机的使用寿命。
但要实现这样的功能,需要应用具有辅助功能服务权限才可以,并且还有个条件是,系统得支持辅助功能服务。而Android4.1.2(API version 16)及以下版本系统的手机是不支持此辅助功能的(虽然有些很简单的辅助功能,但默认实现的功能很少),所以Android4.1.2及以下版本系统可以看作不支持,还有一些品牌机型厂商也不支持,如金立这样的品牌机型厂商等。对于不支持辅助功能的手机,应用的处理逻辑应该是不显示需要借助辅助功能服务才能实现的功能,如图2中的返回键将不会显示给用户。而对于支持辅助功能服务的手机来说,只有授予了此应用的辅助功能服务使用权限,应用才能使用,否则执行功能时是没有作用的。此时可以有多种设计思路,直接返回,友好一些的做法是提醒用户去开启此应用的辅助功能服务,而如果仅仅只是这样提示的话,虽然用户知道此功能要正常使用,需要服务功能服务开启才行,但是用户还是不知道具体该如何操作,不知道进入哪个界面才能打开辅助功能服务。不排除有个别用户知道这个服务,并且知道该怎样打开。但对于大部分用户来说,辅助功能服务确实会让其迷惑,不知到底是什么,该怎样开启。如果是这个原因而使应用无法正常使用,将导致很大一部分用户流失,应用的体验度将会大大的降低。而该发明的方案则恰恰解决了用户这个痛点,使用户使用此类功能时将会很流畅和快捷,不会出现不知道下一步如何操作,而导致应用无法使用的现象。
由于不是所有手机都支持辅助功能服务,所以为了应用的正常使用,需要对机型做适配,需要提前统计出都有哪些机型,哪些系统版本不支持辅助功能服务,以及在支持辅助功能服务的应用上,该如何判断当前应用是否已经获取到了辅助功能服务,判断的依据或方法是什么,如何引导用户跳转到辅助功能服务界面从而打开服务这样的问题。
由此就要实现这样的功能:首先要做的是将不支持服务功能服务的特殊机型去除掉,如金立系列手机。还有不支持的Android系统版本也去除掉,如Android 4.1.2及以下版本系统,然后将其归为不支持的一类,其它类别归为支持的一类。划分好类别后,分别进行处理。对于不支持的类别不做处理,可以选择将此功能隐藏;对于支持的类别,将首先检测当前应用是否具有了使用辅助功能服务的权限,如果没有使用权限,则会弹出一个引导窗口,窗口中给出了进一步操作的信息,界面信息会给出一个简洁的操作步骤,目的是使用户了解这个功能需要借助辅助功能服务,打开权限开关后才能使用。在提示用户时,要提醒用户使用此功能需要首先打开辅助功能服务。提示信息力求简洁明了,下一步操作步骤简单直接,防止步骤复杂,用户失去耐心。然后用户点击其上设置有去设置文字标识的按钮,如图3所示,就回调到一个权限开启的列表界面,选择需要设置的应用,然后将开关开启,如果用户点击了文字标识为取消的按钮,将不能跳转到列表界面,列表界面如图4所示,用户只需要在此界面上找到要设置的应用,然后选择该应用来进行开启,即将要设置的应用开关开启后,对应的应用就具有辅助功能服务使用权限了。
对于实现以上功能,本发明对应的方案是这样的,
1、启动借助辅助功能服务实现的模块,比如之前所述的模拟系统返回键功能,应用首先检测当前Android移动设备的系统版本号(系统版本号Build.VERSION.SDK_INT需要大于等于16(对应Android4.1.2版本系统)才能支持),以及设备名称是否属于不支持辅助功能服务(如金立手机目前确认不支持)的排除机型,如果属于排除机型将使用其它方式来实现此返回键功能,比如使用Root的方式(前提是手机已经被Root);如果不属于排除机型,接着判断当前应用是否已经获取到了辅助功能服务权限,如果已经获取到了权限,将直接执行对应的功能,比如返回键功能,然后借助辅助功能服务AccessibilityService中的执行全局动作方法performGlobalAction(GLOBAL_ACTION_BACK)方法模拟实现系统的返回键功能;如果经判断应用还未获取到权限,则首先弹出一个引导窗口,提示用户如何去开启辅助功能服务,以及提供调出辅助功能服务开启界面的入口。此引导窗口应该做到简洁,清晰些,可以设计成普通的对话框Dialog形态,也可以设计成全屏的Activity形式的,具体表现形式不限。此引导窗口除了具有提醒用户如何开启辅助功能服务的步骤外,还应该包含一个直接调出系统辅助功能服务的开关列表界面,此界面列出了系统所有使用辅助功能服务的应用,并且每个应用对应一个开关,只有在开关开启后,此应用才具有了使用系统辅助功能服务的权利,才能借助此服务实现独特的功能。在开启辅助功能服务开关时,系统会弹出一个确认提示框,提示应用要申请什么样的权限,比如返回键功能,提示应用将监控用户的操作,这些都是系统特意这样设计的,目的用来告知用户,此应用在开启了此权限后,将会获取到一些特殊的权限。这些提醒通常都是有益提醒,目的是让用户在给予应用权限时,对于用户来说具有知情权。用户可以选择取消,不赋予应用权限,当然这样做将不能再使用返回键对应的功能;如果选择了确定,应用将可以借助此权限实现对应的功能,满足用户的需要。
2、如何检测排除机型,根据系统的版本信息和设备品牌,把机型进行归类,判断当前机型是否属于排除机型。
首先过滤系统版本,一般使用系统提供的一个常量系统版本号Build.VERSION.SDK_INT来判断当前的系统版本,系统版本号Build.VERSION.SDK_INT大于等于16,表示当前系统版本是Android4.1.2及以上的版本,即16代表的是Android4.1.2系统,通过判断它的值将小于16,即Android4.1.2以下系统过滤掉。其次,使用Build.BRAND(系统预定义的字符串类型的常量,用来表示系统的品牌)常量来判断当前机型是否属于我们要排除的特殊机型,如金立(品牌名为gionee)品牌手机是已知的过滤对象,如果还有其它品牌手机,将依据规则依次将其添加到过滤名单中来过滤掉。
3、如何判断应用具有了使用辅助功能服务的权限,方法如下:
首先获取系统的辅助功能服务管理器AccessibilityManager,然后创建一个类似“包名/辅助功能服务类名”的字符串,如“com.shere.easytouch/EasyTouchAccessibilityService”,然后使用辅助功能服务管理器AccessibilityManager的方法--获取系统可用的服务列表getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBA CK_ALL_MASK)方法,获取到一个元素为AccessibilityServiceInfo(系统定义的一个类,用来表示服务功能服务类的信息)的列表,这个表包含了当前所有已经获取到辅助功能服务的应用信息,然后轮询这个列表,判断这个列表的每个元素是否有等于了刚才创建的代表此应用的“包名/辅助功能服务类名”字符串,如果能找到,说明此应用已经获取到了辅助功能服务权限,如果列表轮询完毕没有找到,说明没有开启权限。
通过上述介绍的方法,可以实现该功能。
为实现上述目的,本发明提供了详细的通过排除某些特殊机型,根据应用是否已经获取到了辅助功能服务权限,从而决定是否弹出引导框,来引导用户开启辅助功能服务权限的引导流程,此流程如示例图5所示,其实现的步骤如下:
S501:应用程序启动,即为:启动Android移动终端中的应用程序,该应用程序是具有借助系统辅助功能服务实现的应用程序;所述Android移动终端包括Android手机。
S502:用户启动借助辅助功能服务实现的功能模块;即用户要实现某一个需要借助辅助功能服务实现的功能,可以借助系统的辅助功能服务或者其他特殊权限来实现。比如,模拟实现系统的返回键功能,可以借助系统的辅助功能服务权限实现,也可以在手机Root的情况下,借助Root权限来实现。用户启动这样的功能模块后,应用程序将根据手机当前现有的条件来选择用那种方式来实现。
S503:进入排除机型检测流程,即为:借助辅助功能服务实现的功能模块进入到排除机型检测流程中,在其中判断当前Android移动终端的机型是否属于排除机型,排除机型和非排除机型采用不同的处理流程;
S504:判断当前机型是否为程序预先排除机型,即为:根据排除机型检测流程的返回值确定当前机型是否是排除机型,进而决定是进行辅助功能服务权限引导,还是直接跳过引导流程;
S505:若是属于排除机型,就不支持而进入程序其它功能处理流程,即为:若排除机型检测流程的返回的返回值为true或是,表示当前Android移动终端的机型是排除机型而Android移动终端的系统不支持辅助功能服务,程序进入到其他功能处理流程,比如,借助辅助功能服务实现的模拟系统返回键功能,如果当前系统不支持辅助功能服务,点击按键后将进入Root方式或者其他方式的模拟系统返回键实现流程;
S506:进入判断当前设备是否已经获取辅助功能服务权限的检测流程,即为:若排除机型检测流程的返回的返回值为false或否,表示当前Android移动终端的机型不是排除机型而Android移动终端的系统支持辅助功能服务。然后进入辅助功能服务权限的检测子流程,判断当前所述应用程序是否已经获取到了辅助功能服务权限,将在其中判断当前所述应用程序是否已经获取到了权限,获取到权限或未获取到权限分别采用不同的处理流程;
S507:判断当前所述应用程序是否已经获取到辅助功能服务权限,即为:根据辅助功能服务权限的检测子流程的返回值,判断当前所述应用程序的辅助功能服务权限是否开启了,如果已经开启,跳过权限开启引导流程,如果未开启,则进入引导流程,引导用户开启;
S5008:已经获取到权限而直接执行借助权限实现的功能,即为:如果辅助功能服务权限的检测子流程返回的返回值为true或是,说明当前所述应用程序的辅助功能服务权限已经开启,那就跳过引导流程,直接执行借助权限实现的功能;
S5009:启动一个引导框而引导用户如何开启辅助功能服务权限,即为:如果辅助功能服务权限的检测子流程返回的返回值为false或否,说明当前所述应用程序的辅助功能服务权限未开启,则启动一个引导窗口;引导窗口可以设计成任意形态的,比如全屏,或者半屏等形态,如图3所示,此窗口指示用户如何进入到辅助功能服务权限开启界面,以及如何开启。
S5010:执行步骤S5011按照引导窗口的提示信息点击指定按钮跳转到开启辅助功能服务权限界面;这里的引导窗口可以是Activity类型的,也可以是对话框Dialog类型的,关键是在此引导窗口上展示足够丰富的信息来提示用户,引导窗口通常还有一个直接跳转到设置界面的按钮,通过点击引导窗口的跳转按钮直接跳到了辅助功能服务权限开启界面,用户不用自己去设置菜单中的各个子界面中查找这个界面,对于用户来说节省了时间和精力,为用户带来了方便和快捷的体验。同时丰富的信息,操作简洁的窗口,提醒用户要使用此功能开启这个权限是必须的,打消用户的顾虑。
S5011:判断用户是否选择了设置有去设置文字标识的按钮,即为:用户在引导窗口界面进行选择,选项包括设置有取消文字标识的按钮和设置有去设置文字标识的按钮,如果选择设置有取消文字标识的按钮将执行步骤S5012来退出当前引导窗口,借助辅助功能服务实现的功能将无法实现;如果选择设置有去设置文字标识的按钮,就执行步骤S5013使得辅助功能服务实现的功能模块跳转到辅助功能服务权限开启界面,然后用户在此界面进行权限开启操作,也就是执行借助权限实现的功能;
S5012:用户选择了设置有取消文字标识的按钮就退出引导窗口来让此功能结束,即为:如果用户在当前的引导窗口界面选择了设置有取消文字标识的按钮,辅助功能服务实现的功能模块将退出引导窗口,利用辅助功能服务实现的功能将无法实现,功能到此结束;
S5013:跳转到辅助功能服务权限开启界面等待用户进一步操作,即为:如果辅助功能服务实现的功能模块跳转到检测到用户点击了设置有去设置文字标识的按钮,将首先定义一个动作类型为
Settings.ACTION_ACCESSIBILITY_SETTINGS
的Intent,所述Settings.ACTION_ACCESSIBILITY_SETTINGS为设置模块中的一个字符串常量值,代表这是一个启动辅助功能服务的动作,然后使用上下文Context的启动界面startActivity方法启动这个Intent,这样就可以将Android移动终端的系统的辅助功能服务权限开启界面开启,用户进入到这个界面后,就可以开启应用对应的辅助功能服务权限了;
S5014:执行步骤5015判断用户是否退出此界面,而辅助功能服务权限开启界面是Android移动终端的系统对外提供的一个可以供用户开启某个应用权限的界面,此界面将列出Android移动终端的系统中所有使用了辅助功能服务的应用,并且每个应用将对应一个开关;在此界面上进一步判断用户下一步的操作逻辑,例如,用户是否退出了此界面的操作逻辑。
S5015:用户选择了取消键代表退出该开启界面使得此功能结束,即为:辅助功能服务权限开启界面上设置有退出键或取消键,如果用户在辅助功能服务权限开启界面选择了退出键或者取消键,辅助功能服务实现的功能模块将退出此界面,借助辅助功能服务实现的功能将到此结束;
S5016:用户在此权限开启界面自行找到要开启的应用然后点击对应的应用开关而弹出一个系统权限提示框,即为:如果用户并未退出此权限开启界面,而是在此权限开启界面中找到了要开启权限的应用,并且点击了对应的开关按钮,系统将弹出一个系统级别的权限提示框,提示框将提醒用户,此应用将使用系统的哪一类服务,提示用户确定是否真的开启;这个提示是以一个提示框的形式进行提示,用户可以选择提示框上的取消按钮或者确定按钮来进行取消或确定。
S5017:判断用户是否点击确定按钮,即为:用户可以选择确定按钮或者取消按钮,选择确定按钮将开启此应用的辅助功能服务权限,选择取消按钮将退回到所述权限开启界面,然后用户能够重新进行选择,或者进行其他应用的权限开启;
S5018:应用成功获取到辅助功能服务权限使得下次再使用此功能时将生效,即为:开启此应用的辅助功能服务权限后,应用程序将可以借助此权限实现需要借助辅助功能服务实现的功能;此时意味应用程序成功获取到辅助功能服务权限,下次再使用此功能时将会生效。
S5019:程序执行完毕,即为:引导用户获取辅助功能服务权限的辅助功能服务实现的功能模块结束,辅助功能服务实现的功能模块执行完毕。
S5020:应用进入待机状态,即为;应用程序进入待机状态,如果用户获取到了所述权限,下次运行时将直接执行对应的功能;如果以上方法中间过程退出,并未获取到权限,将提示用户重新执行此流程。
以上属于获取辅助功能服务权限时引导用户开启权限的整体处理的主流程,下面说一下整体流程中的一个子流程:排除机型检测流程,如图6所示,在所述排除机型检测流程中判断当前Android移动终端的机型是否属于排除机型的步骤如下所示,
S601:进入排除机型检测流程,即为:进入排除机型检测流程,需要对Android移动终端的机型的品牌信息和系统版本这样的信息进行判断;
S602:获取机型的品牌信息,即为:首先通过Android移动终端的系统自带的字符串常量Build.BRAND来进行判断机型,也就获取了机型的品牌信息,这个常量代表了机型的品牌信息;如小米手机的这个值包含"Xiaomi"字样的字符串,如果出现此字符串,就代表当前机型为小米手机。
S603:判断此品牌是否为需要特殊处理的机型,即为:通过得到的字符串常量Build.BRAND来判断Android移动终端属于哪一类特殊处理的机型,所述特殊处理的机型包括小米、华为、魅族或者三星,若为特殊处理的机型,就判断该Android移动终端的机型为排除机型;
S604:判断当前机型的系统版本信息是否是需要排除的版本,即为:若此品牌不为需要特殊处理的机型,Android移动终端的系统自带的Build.VERSION.SDK_INT获取Android移动终端的系统的版本号,Build.VERSION.SDK_INT是一个整型的常量值,代表系统版本号,判断该系统版本号Build.VERSION.SDK_INT是否大于等于16,如果大于等于16,属于非排除机型;如果小于16,代表是Android4.1.2以下的系统,认为系统是没有辅助功能服务的,属于排除机型,16表示当前的系统版本为Android4.1.2,即判断当前系统版本是否为Android4.1.2及以上版本的系统;
S605:结束判断确定当前为非排除机型就返回false,即为:经过检测Android移动终端的机型不属于排除机型,跳出检测,返回false或否;
S606:当前机型是排除机型就跳出检测就返回true,即为:如果Android移动终端的机型属于排除机型,需要特殊处理,则跳出检测,返回true或是;
S607:结束排除机型检测流程,即为:终止排除机型检测流程,将返回值传递回去。
以上是排除机型检测流程的方法,下面介绍一下所述辅助功能服务权限的检测子流程进行的辅助功能服务权限是否开启的检测流程,如图7所示,具体步骤如下,
S701:进入辅助功能服务权限是否开启检测流程,即为:辅助功能服务权限的检测子流程进入辅助功能服务权限是否开启检测流程需要对当前的应用程序进行检测,判断其是否已经获取到了辅助功能服务使用权;
S702:创建一个继承了辅助功能服务AccessibilityService的类,此类在应用获取到辅助功能服务权限后,负责实现特殊的功能,即为:要使用系统的辅助功能服务,首先需要应用程序创建一个继承了辅助功能服务AccessibilityService的类,然后将此类注册到系统的辅助功能服务列表中,最后再启动此服务,应用程序就可以借助此服务实现特殊目的的功能了;而本发明引导打开辅助功能服务权限开启的流程,其实就是引导用户在系统的辅助功能服务列表中启动此服务;
S703:获取当前应用的包名,和继承了辅助功能服务AccessibilityService的类的类名,即为:通过上下文Context变量的—获取包名称getPackageName方法可以获取到当前应用的包名,通过Java类的.class属性得到当前对应的类,然后通过其—获取名称getName()方法进一步得到继承了辅助功能服务AccessibilityService类的类名,例如,EasyTouchAccessibilityService(随便创建的一个类,集成了辅助功能服务AccessibilityService类。新创建的类名称可以任意定义,当然为了程序可读性强,这样的定义可读性更为有意义一些)就是一个继承了辅助功能服务AccessibilityService类的类名;
S704:将包名和类名组合成特殊格式的字符串,形如“包名/类名”这样的格式,即为:将上一个步骤中得到的包名,以及获得的继承了辅助功能服务AccessibilityService类的类名,组合成特殊格式的字符串,形如“包名/类名”这样的格式,等待以下步骤中使用;
S705:获取系统的辅助功能服务管理器AccessibilityManager,然后调用管理器自带的—获取系统可用的服务列表getEnabledAccessibilityServiceList方法,获取系统当前授权的辅助功能服务列表List<AccessibilityServiceInfo(系统定义的一个类,用来表示服务功能服务类的信息)>,即为:通过上下文context的—获取系统服务getSystemService(Context.ACCESSIBILITY_SERVICE)方法获取系统的辅助功能服务管理器AccessibilityManager,然后调用管理器自带的--获取系统可用的服务列表getEnabledAccessibilityServiceList方法,获取系统当前授权的辅助功能服务列表List<AccessibilityServiceInfo(系统定义的一个类,用来表示服务功能服务类的信息)>,此列表是一个元素为AccessibilityServiceInfo(系统定义的一个类,用来表示服务功能服务类的信息)的列表,每一元素存储了一个应用的辅助功能服务信息;
S706:轮询列表List<AccessibilityServiceInfo(系统定义的一个类,用来表示服务功能服务类的信息)>中的每个元素,调用每个元素的getId()(这个方法用来获取每个元素的唯一值)方法,得到一个特殊的字符串,此字符串代表一个获取了辅助功能服务权限的服务,即为:使用for循环开始轮询列表List<AccessibilityServiceInfo(系统定义的一个类,用来表示服务功能服务类的信息)>中的每个元素,然后调用每个元素的getId()(这个方法用来获取每个元素的唯一值)方法,得到一个特殊的字符串,此字符串也是一个形如“包名/类名”这样格式的字符串,代表一个获取了辅助功能服务权限的服务;
S707:依次判断此字符串是否等于之前当前应用组合的“包名/类名”,即为:利用轮询,依次判断列表中的每个元素(每个元素也是形如“包名/类名”这样的字符串)是否等于之前当前应用组合而成的“包名/类名”这样的字符串;
S708:判断字符串是否相等,即为:判断上一步中指定的两个形如“包名/类名”这样的字符串的结果是不是相等;
S709:是否是列表的最后一个元素,即为:如果两个字符串不相等,则去判断从列表List<AccessibilityServiceInfo(系统定义的一个类,用来表示服务功能服务类的信息)>中取出的元素是不是列表中的最后一个元素,如果不是,则返回到步骤S706,取下一个元素继续进行轮询;
S7010:轮询期间有无异常发生,即为:如果上一步中指定的两个形如“包名/类名”这样的字符串的结果是相等的,则判断以上步骤S705-S709过程中是否出现了异常情况。需要使用try—catch(是面向对象语言中的一种捕获程序异常的机制)进行包装,判断这个过程是否有异常发生,如果一旦抛出异常,直接返回false或否,并退出所述辅助功能服务权限的检测子流程;
S7011:此时确定当前应用已经获取到辅助功能服务权限,即为:如果字符串相等,并且未发生异常情况,此时可以确定当前应用程序已经获取到辅助功能服务权限;
S7012:返回true或是表示当前应用有权限,即为:确定应用程序具有辅助功能服务权限,则返回true或是;
S7013:返回false或否表示当前应用无权限,即为:确定应用程序不具有辅助功能服务权限,则返回false或否;
S7014:退出辅助功能服务权限是否开启检测流程,即为:退出辅助功能服务权限的检测子流程,并将检测的返回值返回。
另外,本发明中提到的一些术语解释如下:
悬浮窗:触发开启之后,屏幕当中出现的一个虚拟窗口,它可以很大,充满整个屏幕;也可以很小,显示为一个圆形或任意形状的按钮,它可以随意拖动或者出现在屏幕上的任意位置,并且可以悬浮于大多数的应用界面之上。
Android:中文名称为安卓,是一种基于Linux的自由及开放源代码的操作系统,主要用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。
Intent:“意向、打算”的意思。Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。
Context:可以理解为“上下文”:它贯穿整个应用。也可以理解成“运行环境”。它提供了一个应用运行所需要的信息,资源,系统服务等。同样可以理解成“场景”,用户操作和系统交互这一过程就是一个场景,比如Activity之间的切换,服务的启动等都少不了Context。
Activity:是Android四大组件之一,形象的说就是一个容器,在里面可以放置各种控件(按钮,文本,复选框等),就形成了软件的界面,Activity是可见的,如果不加任何控件的话,那么就像Windows中的空白窗体一样。Accessibility辅助功能:在Android系统设置中有一个辅助功能菜单,顾名思义就是辅助用户进行一些特殊功能的使用,此功能的本意就是帮助用户,特别是弱势群体用户进行一些特殊功能设置。
对于那些由于视力、听力或其它身体原因导致不能方便使用Android智能手机的用户,Android提供了Accessibility功能和服务来帮助这些用户更加简单、方便地操作设备,包括文字转语音、触觉反馈、手势操作、轨迹球和手柄操作。开发者可以搭建自己的Accessibility服务,例如声音提示,物理反馈,和其他可选的操作模式。
AccessibilityService(辅助功能服务):是Android SDK中的一个辅助类,可以监听手机的焦点和窗口变化,按钮点击等等。实现它的服务需要在手机设置里面的辅助功能列表项中,找到你自己实现的辅助类,然后打开它就可以获得辅助功能服务权限,从而后续就可以进行一系列的监听和处理动作。这个功能Google的出发点是给那些肢体上有障碍的人来使用的,比如,手指不健全的用户,怎么才能滑动屏幕,然后打开一个应用?就可以通过这个服务来实现。
Root:手机Root指使用者获取到系统的最高权限,就跟电脑获取超级管理员一样的。手机没Root之前,使用者是以一个普通人的身份在用这个手机,他只能被动的使用里面的一些功能,或者在不影响系统全局的情况下安装一些新的程序。而Root之后,使用者就变成了一个开发者的身份,具有超级管理员的权限,他可以深入的编辑这部手机了。
本发明实现了在Android系统设备上,启动具有辅助功能的应用时,通过判读是否为排除机型,以及是否具有辅助功能服务使用权限等检测结果,自动引导用户进行辅助功能权限开启的方法,从而为借助辅助功能服务实现了某些特殊功能的应用在Android设备上能够顺利运行提供了一套解决方案。
针对需要辅助功能才能实现的应用程序来说,如果所在的终端不支持辅助功能,或者支持辅助功能,但是默认不给予应用程序权限,应用程序是无法正常使用的,要不报错,要不就是无响应。只有在赋予了应用辅助功能使用权限后,它才能正常的运行,本发明设计和实现了这样的一种解决方法。首先,通过调研,确定哪些机型或者系统版本预置了辅助功能权限管理软件,那些机型不支持这个权限,确保应用在这些机型或系统版本上不出现无效或无响应;其次,本发明是自动引导用户开启辅助功能权限时,全程由程序控制,用户只需要点击确认键和开关即可,不需用户过多的选择页面然后跳转,提高了用户操作的便利性;再次,引导框有如何开启的详细步骤,方便用户操作,增加了权限开启的透明度,方便用户操作;然后,开启辅助功能权限不会带来安全方面的问题,也不会消耗系统的内存和电量等资源;最后,此功能解决了应用在这些特殊机型上无法运行的问题,用户不用自己查找什么软件限制应用不能使用,从而避免自己去费时费力进行重新设置,解决了用户的实际问题,提高了用户对此应用的用户体验度。
本方案中检测智能终端品牌还有其他的实现方法,除了使用Build.BRAND(系统预定义的字符串类型的常量,用来表示系统的品牌)来区分外,还可以使用Build.MODEL(系统预定义的字符串类型常量,用来表示系统品牌的某个产品,通常会带有品牌名称)来进行更细致的区分,当然也可以通过它确认终端的品牌信息。
引导的屏幕居中的小窗口是通过对话框Dialog方式实现的,也可以使用Activity组件的方式实现,或者采用自定义视图View的方式实现,但是相对于对话框Dialog的方式就复杂了一些。
以上以实施例的方式对本发明作了描述,本领域的技术人员应当理解,本公开不限于以上描述的实施例,在不偏离本发明的范围的情况下,可以做出各种变化、改变和替换。

Claims (3)

1.一种引导终端用户打开应用的辅助功能权限的方法,其特征在于,包括如下步骤:
S501:应用程序启动,即为:启动Android移动终端中的应用程序,该应用程序是具有借助系统辅助功能服务实现的应用程序;
S502:用户启动借助辅助功能服务实现的功能模块;
S503:进入排除机型检测流程,即为:借助辅助功能服务实现的功能模块进入到排除机型检测流程中,在其中判断当前Android移动终端的机型是否属于排除机型,排除机型和非排除机型采用不同的处理流程;
S504:判断当前机型是否为程序预先排除机型,即为:根据排除机型检测流程的返回值确定当前机型是否是排除机型,进而决定是进行辅助功能服务权限引导,还是直接跳过引导流程;
S505:若是属于排除机型,就不支持而进入程序其它功能处理流程,即为:若排除机型检测流程的返回的返回值为true或是,表示当前Android移动终端的机型是排除机型而Android移动终端的系统不支持辅助功能服务,程序进入到其他功能处理流程;
S506:进入判断当前设备是否已经获取辅助功能服务权限的检测流程,即为:若排除机型检测流程的返回的返回值为false或否,表示当前Android移动终端的机型不是排除机型而Android移动终端的系统支持辅助功能服务;然后进入辅助功能服务权限的检测子流程,判断当前所述应用程序是否已经获取到了辅助功能服务权限,将在其中判断当前所述应用程序是否已经获取到了权限,获取到权限或未获取到权限分别采用不同的处理流程;
S507:判断当前所述应用程序是否已经获取到辅助功能服务权限,即为:根据辅助功能服务权限的检测子流程的返回值,判断当前所述应用程序的辅助功能服务权限是否开启了,如果已经开启,跳过权限开启引导流程,如果未开启,则进入引导流程,引导用户开启;
S5008:已经获取到权限而直接执行借助权限实现的功能,即为:如果辅助功能服务权限的检测子流程返回的返回值为true或是,说明当前所述应用程序的辅助功能服务权限已经开启,那就跳过引导流程,直接执行借助权限实现的功能;
S5009:启动一个引导框而引导用户如何开启辅助功能服务权限,即为:如果辅助功能服务权限的检测子流程返回的返回值为false或否,说明当前所述应用程序的辅助功能服务权限未开启,则启动一个引导窗口;
S5010:执行步骤S5011按照引导窗口的提示信息点击指定按钮跳转到开启辅助功能服务权限界面;
S5011:判断用户是否选择了设置有“去设置”文字标识的按钮,即为:用户在引导窗口界面进行选择,选项包括设置有“取消”文字标识的按钮和设置有“去设置”文字标识的按钮,如果选择设置有“取消”文字标识的按钮将执行步骤S5012来退出当前引导窗口,借助辅助功能服务实现的功能将无法实现;如果选择设置有“去设置”文字标识的按钮,就执行步骤S5013使得辅助功能服务实现的功能模块跳转到辅助功能服务权限开启界面,然后用户在此界面进行权限开启操作,也就是执行借助权限实现的功能;
S5012:用户选择了设置有“取消”文字标识的按钮就退出引导窗口来让此功能结束,即为:如果用户在当前的引导窗口界面选择了设置有“取消”文字标识的按钮,辅助功能服务实现的功能模块将退出引导窗口,利用辅助功能服务实现的功能将无法实现,功能到此结束;
S5013:跳转到辅助功能服务权限开启界面等待用户进一步操作,即为:如果辅助功能服务实现的功能模块跳转到检测到用户点击了设置有“去设置”文字标识的按钮,将首先定义一个动作类型为Settings.ACTION_ACCESSIBILITY_SETTINGS的Intent,所述Settings.ACTION_ACCESSIBILITY_SETTINGS为设置模块中的一个字符串常量值,代表这是一个启动辅助功能服务的动作,然后使用上下文Context的启动界面startActivity方法启动这个Intent,这样就可以将Android移动终端的系统的辅助功能服务权限开启界面开启,用户进入到这个界面后,就可以开启应用对应的辅助功能服务权限了;
S5014:执行步骤5015判断用户是否退出此界面,而辅助功能服务权限开启界面是Android移动终端的系统对外提供的一个可以供用户开启某个应用权限的界面,此界面将列出Android移动终端的系统中所有使用了辅助功能服务的应用,并且每个应用将对应一个开关;
S5015:用户选择了取消键代表退出该开启界面使得此功能结束,即为:辅助功能服务权限开启界面上设置有退出键或取消键,如果用户在辅助功能服务权限开启界面选择了退出键或者取消键,辅助功能服务实现的功能模块将退出此界面,借助辅助功能服务实现的功能将到此结束;
S5016:用户在此权限开启界面自行找到要开启的应用然后点击对应的应用开关而弹出一个系统权限提示框,即为:如果用户并未退出此权限开启界面,而是在此权限开启界面中找到了要开启权限的应用,并且点击了对应的开关按钮,系统将弹出一个系统级别的权限提示框,提示框将提醒用户,此应用将使用系统的哪一类服务,提示用户确定是否真的开启;
S5017:判断用户是否点击确定按钮,即为:选择确定按钮将开启此应用的辅助功能服务权限,选择取消按钮将退回到所述权限开启界面,然后用户能够重新进行选择,或者进行其他应用的权限开启;
S5018:应用成功获取到辅助功能服务权限使得下次再使用此功能时将生效,即为:开启此应用的辅助功能服务权限后,应用程序将可以借助此权限实现需要借助辅助功能服务实现的功能;
S5019:程序执行完毕,即为:引导用户获取辅助功能服务权限的辅助功能服务实现的功能模块结束,辅助功能服务实现的功能模块执行完毕;
S5020:应用进入待机状态,即为;应用程序进入待机状态,如果用户获取到了所述权限,下次运行时将直接执行对应的功能。
2.根据权利要求1所述的引导终端用户打开应用的辅助功能权限的方法,其特征在于,在所述排除机型检测流程中判断当前Android移动终端的机型是否属于排除机型的步骤如下所示,
S601:进入排除机型检测流程,即为:进入排除机型检测流程;
S602:获取机型的品牌信息,即为:首先通过Android移动终端的系统自带的字符串常量Build.BRAND来进行判断机型,也就获取了机型的品牌信息,这个常量代表了机型的品牌信息;
S603:判断此品牌是否为需要特殊处理的机型,即为:通过得到的字符串常量Build.BRAND来判断Android移动终端属于哪一类特殊处理的机型,若为特殊处理的机型,就判断该Android移动终端的机型为排除机型;
S604:判断当前机型的系统版本信息是否是需要排除的版本,即为:若此品牌不为需要特殊处理的机型,Android移动终端的系统自带的Build.VERSION.SDK_INT获取Android移动终端的系统的版本号,Build.VERSION.SDK_INT是一个整型的常量值,代表系统版本号,判断该系统版本号Build.VERSION.SDK_INT是否大于等于16,如果大于等于16,属于非排除机型;如果小于16,代表是Android4.1.2以下的系统,认为系统是没有辅助功能服务的,属于排除机型,16表示当前的系统版本为Android4.1.2,即判断当前系统版本是否为Android4.1.2及以上版本的系统;
S605:结束判断确定当前为非排除机型就返回false,即为:经过检测Android移动终端的机型不属于排除机型,跳出检测,返回false或否;
S606:当前机型是排除机型就跳出检测就返回true,即为:如果Android移动终端的机型属于排除机型,需要特殊处理,则跳出检测,返回true或是;
S607:结束排除机型检测流程,即为:终止排除机型检测流程,将返回值传递回去。
3.根据权利要求1所述的引导终端用户打开应用的辅助功能权限的方法,其特征在于,所述辅助功能服务权限的检测子流程进行的辅助功能服务权限是否开启的检测流程,具体步骤如下,
S701:进入辅助功能服务权限是否开启检测流程,即为:辅助功能服务权限的检测子流程进入辅助功能服务权限是否开启检测流程需要对当前的应用程序进行检测,判断其是否已经获取到了辅助功能服务使用权;
S702:创建一个继承了辅助功能服务AccessibilityService的类,此类在应用获取到辅助功能服务权限后,负责实现特殊的功能,即为:要使用系统的辅助功能服务,首先需要应用程序创建一个继承了辅助功能服务AccessibilityService的类,然后将此类注册到系统的辅助功能服务列表中,最后再启动此服务;
S703:获取当前应用的包名,和继承了辅助功能服务AccessibilityService的类的类名,即为:通过上下文Context变量的—获取包名称getPackageName方法可以获取到当前应用的包名,通过Java类的.class属性得到当前对应的类,然后通过其—获取名称getName()方法进一步得到继承了辅助功能服务AccessibilityService类的类名;
S704:将包名和类名组合成特殊格式的字符串,形如“包名/类名”这样的格式,即为:将上一个步骤中得到的包名,以及获得的继承了辅助功能服务AccessibilityService类的类名,组合成特殊格式的字符串,形如“包名/类名”这样的格式;
S705:获取系统的辅助功能服务管理器AccessibilityManager,然后调用管理器自带的—获取系统可用的服务列表getEnabledAccessibilityServiceList方法,获取系统当前授权的辅助功能服务列表,即为:通过上下文context的—获取系统服务getSystemService(Context.ACCESSIBILITY_SERVICE)方法获取系统的辅助功能服务管理器AccessibilityManager,然后调用管理器自带的--获取系统可用的服务列表getEnabledAccessibilityServiceList方法,获取系统当前授权的辅助功能服务列表List<AccessibilityServiceInfo>,此列表是一个元素为AccessibilityServiceInfo的列表,每一元素存储了一个应用的辅助功能服务信息;
S706:轮询列表List<AccessibilityServiceInfo>中的每个元素,调用每个元素的getId()方法,得到一个特殊的字符串,此字符串代表一个获取了辅助功能服务权限的服务,即为:使用for循环开始轮询列表List<AccessibilityServiceInfo>中的每个元素,然后调用每个元素的getId()方法,得到一个特殊的字符串,此字符串也是一个形如“包名/类名”这样格式的字符串,代表一个获取了辅助功能服务权限的服务;
S707:依次判断此字符串是否等于之前当前应用组合的“包名/类名”,即为:利用轮询,依次判断列表中的每个元素是否等于之前当前应用组合而成的“包名/类名”这样的字符串;
S708:判断字符串是否相等,即为:判断上一步中指定的两个形如“包名/类名”这样的字符串的结果是不是相等;
S709:是否是列表的最后一个元素,即为:如果两个字符串不相等,则去判断从列表List<AccessibilityServiceInfo>中取出的元素是不是列表中的最后一个元素,如果不是,则返回到步骤S706,取下一个元素继续进行轮询;
S7010:轮询期间有无异常发生,即为:如果上一步中指定的两个形如“包名/类名”这样的字符串的结果是相等的,则判断以上步骤S705-S709过程中是否出现了异常情况;需要使用try—catch进行包装,判断这个过程是否有异常发生,如果一旦抛出异常,直接返回false或否,并退出所述辅助功能服务权限的检测子流程;
S7011:此时确定当前应用已经获取到辅助功能服务权限,即为:如果字符串相等,并且未发生异常情况,此时可以确定当前应用程序已经获取到辅助功能服务权限;
S7012:返回true或是表示当前应用有权限,即为:确定应用程序具有辅助功能服务权限,则返回true或是;
S7013:返回false或否表示当前应用无权限,即为:确定应用程序不具有辅助功能服务权限,则返回false或否;
S7014:退出辅助功能服务权限是否开启检测流程,即为:退出辅助功能服务权限的检测子流程,并将检测的返回值返回。
CN201710543502.2A 2017-07-05 2017-07-05 一种引导终端用户打开应用的辅助功能权限的方法 Active CN107357580B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710543502.2A CN107357580B (zh) 2017-07-05 2017-07-05 一种引导终端用户打开应用的辅助功能权限的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710543502.2A CN107357580B (zh) 2017-07-05 2017-07-05 一种引导终端用户打开应用的辅助功能权限的方法

Publications (2)

Publication Number Publication Date
CN107357580A CN107357580A (zh) 2017-11-17
CN107357580B true CN107357580B (zh) 2020-04-21

Family

ID=60292721

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710543502.2A Active CN107357580B (zh) 2017-07-05 2017-07-05 一种引导终端用户打开应用的辅助功能权限的方法

Country Status (1)

Country Link
CN (1) CN107357580B (zh)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107943369B (zh) * 2017-11-30 2020-01-21 东软集团股份有限公司 一种权限申请控制管理的方法、装置、介质和电子设备
CN108093057A (zh) * 2017-12-25 2018-05-29 北京金山安全软件有限公司 一种引导权限开启的方法及装置
CN109992321A (zh) * 2017-12-28 2019-07-09 珠海市君天电子科技有限公司 一种应用设置方法及装置
CN108133124B (zh) * 2017-12-29 2020-09-08 上海连尚网络科技有限公司 一种用于应用程序获取系统权限方法及设备
CN108647070B (zh) * 2018-04-18 2022-02-22 Oppo广东移动通信有限公司 信息提醒方法、装置、移动终端和计算机可读介质
CN108959939B (zh) * 2018-04-18 2020-12-25 腾讯科技(深圳)有限公司 一种系统权限开启方法、装置、系统和存储介质
CN108810274A (zh) * 2018-06-08 2018-11-13 广州优视网络科技有限公司 应用辅助功能的启动方法、装置、存储介质和终端
CN108875355A (zh) * 2018-06-11 2018-11-23 北京京东金融科技控股有限公司 一种访问权限的控制方法和装置
CN109683944B (zh) * 2018-11-16 2024-05-07 平安科技(深圳)有限公司 应用功能开关管理方法、装置、设备及可读存储介质
CN109858200A (zh) * 2018-12-25 2019-06-07 北京奇安信科技有限公司 一种优化软件激活的处理方法及终端
CN111381796B (zh) * 2018-12-28 2021-09-17 北京字节跳动网络技术有限公司 一种在客户端上实现ktv功能的处理方法、装置及用户设备
CN111381797B (zh) * 2018-12-28 2021-10-15 北京字节跳动网络技术有限公司 一种在客户端上实现ktv功能的处理方法、装置及用户设备
CN111026316A (zh) * 2019-11-25 2020-04-17 维沃移动通信有限公司 一种图像显示方法及电子设备
CN111752447B (zh) * 2020-05-22 2022-04-15 思必驰科技股份有限公司 一种信息获取方法、装置以及计算机可读存储介质
CN114463730B (zh) * 2021-07-15 2023-07-14 荣耀终端有限公司 一种页面识别方法及终端设备
CN114625467A (zh) * 2022-03-21 2022-06-14 浙江网商银行股份有限公司 操作引导方法以及装置
CN117112269B (zh) * 2023-10-24 2024-01-26 湖南双鸿科技有限公司 基于安卓辅助服务功能实现跨app传输数据的方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110302516A1 (en) * 2010-06-02 2011-12-08 Oracle International Corporation Mobile design patterns
CN104883444B (zh) * 2015-05-15 2017-11-14 广东欧珀移动通信有限公司 一种通话快捷应用方法、系统及移动终端
CN105701398B (zh) * 2015-12-30 2019-06-21 北京金山安全软件有限公司 一种开启辅助功能权限的方法、装置及电子设备
CN106228063A (zh) * 2016-07-27 2016-12-14 北京金山安全软件有限公司 辅助功能权限操控方法、装置及终端设备
CN106886692A (zh) * 2017-03-23 2017-06-23 北京金山安全软件有限公司 应用程序的使用方法、装置及电子设备

Also Published As

Publication number Publication date
CN107357580A (zh) 2017-11-17

Similar Documents

Publication Publication Date Title
CN107357580B (zh) 一种引导终端用户打开应用的辅助功能权限的方法
CN106648779B (zh) 一种智能终端悬浮窗权限设置方法
US11127398B2 (en) Method for voice controlling, terminal device, cloud server and system
CN106598630A (zh) 按键控制方法、装置及终端
CN108364645A (zh) 一种基于语音指令实现页面交互的方法及装置
CN106406867B (zh) 一种基于android系统的读屏方法及装置
EP3109772A1 (en) Text input method and device
US20180165105A1 (en) Object starting method and device
CN107240400A (zh) 终端操作方法及装置
CN106371752B (zh) 一种安卓系统智能终端的虚拟按键实现方法及装置
CN105867797A (zh) 对触摸屏上的虚拟按键的控制方法、装置以及移动终端
JP2008508597A (ja) ヘルプユーティリティアプリケーションプログラム
CN110620844B (zh) 程序的启动方法、装置、设备及存储介质
CN103136018A (zh) 一种基本输入输出系统bios的设置方法及系统
CN105046283A (zh) 终端操作方法和终端操作装置
CN109271223A (zh) 窗口切换方法、装置、终端及计算机可读存储介质
CN114237399A (zh) 触觉反馈方法、装置、介质、设备
CN105306817B (zh) 一种拍照的控制方法及移动终端
CN107765972A (zh) 一种安卓终端截屏方法
CN105808257B (zh) 一种应用弹窗识别方法和装置
CN104615951B (zh) 一种信息处理方法及移动终端
KR20190114566A (ko) 모바일 장치 사용을 관리하기 위한 방법 및 이를 위한 모바일 장치
CN102970422B (zh) 一种实现安全拔出sd卡的方法及手机
CN108647070B (zh) 信息提醒方法、装置、移动终端和计算机可读介质
CN105718109B (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
GR01 Patent grant
GR01 Patent grant