Android Accessibility API的研究与应用(一)

原创 2015年07月07日 15:07:42

Android accessibility Api通常都是用作一些辅助功能,如点击等。但是由于权限问题,存在一定安全上面的问题,例如获取手机屏幕上的信息内容等,下面是官方对AccessibilityEvent的称述:

This class represents accessibility events that are sent by the system when something notable happens in the user interface. For example, when a Button is clicked, a View is focused, etc.

An accessibility event is fired by an individual view which populates the event with data for its state and requests from its parent to send the event to interested parties. The parent can optionally add an AccessibilityRecordfor itself before dispatching a similar request to its parent. A parent can also choose not to respect the request for sending an event. The accessibility event is sent by the topmost view in the view tree. Therefore, an AccessibilityService can explore all records in an accessibility event to obtain more information about the context in which the event was fired.

The main purpose of an accessibility event is to expose enough information for an AccessibilityService to provide meaningful feedback to the user. Sometimes however, an accessibility service may need more contextual information then the one in the event pay-load. In such cases the service can obtain the event source which is an AccessibilityNodeInfo (snapshot of a View state) which can be used for exploring the window content. Note that the privilege for accessing an event's source, thus the window content, has to be explicitly requested. For more details refer to AccessibilityService. If an accessibility service has not requested to retrieve the window content the event will not contain reference to its source. Also for events of typeTYPE_NOTIFICATION_STATE_CHANGED the source is never available.

简单地说,可以通过重载onAccessibilityEvent,获得一个AccessibilityEvent对象,而这个对象可以的到所有的通过accessibility service暴露出来的信息,这些信息包括获得当前系统激活应用的包名(描述可能不太准确),获得当前界面的信息,得到当前用户的动作等功能.

部分代码如下

public class MyAccessibilityService extends AccessibilityService {


    @Override

    public void onAccessibilityEvent(AccessibilityEvent event) {

    Log.i("PackageName",event.getPackageName().toString());

    Log.d("EventName",getTypeName(event.getEventType()));

    

    traverseNode(getRootInActiveWindow());

    

    AccessibilityNodeInfo nodes = event.getSource();  

    

    Log.d("------------------------","-------------------------");

    }


    @Override

    public void onInterrupt() {

    }



    private void traverseNode(AccessibilityNodeInfo node) {

        if (null == node)

            return;


        final int count = node.getChildCount();

        if (count > 0) {

            for (int i = 0; i < count; i++) {

                AccessibilityNodeInfo childNode = node.getChild(i);

                traverseNode(childNode);

            }

        } else {

            CharSequence text = node.getText();

            Log.d("test", "Node text = " + text);

        }

        

    }

}

待解决的问题:

系统是合适调用onAccessibilityEvent的,经过试验表明,不同界面切换,同一界面上输入内容时,会激活;但是诸如在系统菜单左右滑动页面,没有任何反应

注:本人刚学习Android,用词上可能存在一定的不恰当,请各位批评与包容

Android API Guides---Building Accessibility Services

Building Accessibility Services 无障碍服务是提供的增强用户界面,帮助用户残疾,或者谁可能暂时无法与设备完全交互的应用程序。例如,用户谁在开车,采取一个年轻的孩子照顾或...

Android Accessibility 安全性研究报告

Android Accessibility 安全性研究报告 360手机卫士 2016-09-11 共140579人围观 ,发现 2 个不明物体 安全报告终端安全 第一章Acc...
  • Imgloox
  • Imgloox
  • 2017年04月27日 11:23
  • 264

Android Accessibility(辅助功能) --实现Android应用自动安装、卸载、强行停止

对于那些由于视力、听力或其它身体原因导致不能方便使用Android智能手机的用户,Android提供了Accessibility功能和服务帮助这些用户更加简单地操作设备,包括文字转语音、触觉反馈、手势...

android Accessibility系统自带语音助手打开第三方应用

AccessibilityService是什么 某些用户由于视力、身体、年龄等问题致使他们不能使用触摸屏幕,为这些用户提供无障碍服务时应该更多的提供语音、触摸反馈、手势操作、模拟点击等。 为此...
  • ldqmz
  • ldqmz
  • 2016年07月15日 14:16
  • 157

Android Accessibility(辅助功能) --实现Android应用自动安装、卸载

随着Android版本的不断升级,Android Accessibility功能也越来越强大,Android 4.0版本以前,系统辅助服务功能比较单一,仅仅能过单向获取窗口元素信息,比如获取输入框用户...

Android Accessibility(辅助功能) --实现Android应用自动安装、卸载

对于那些由于视力、听力或其它身体原因导致不能方便使用Android智能手机的用户,Android提供了Accessibility功能和服务帮助这些用户更加简单地操作设备,包括文字转语音、触觉反馈、手势...

Android 6.0+ (api 23+)应用保活方案研究

Android 6.0开始,系统引进了一个Doze系统的概念。Doze系统是只当设备被闲置,用户没有对设备有互动的操作,也就是锁屏的情况下,系统过一段时间进入这个Doze模式,其中还有一个定义叫idl...
  • ArJinMC
  • ArJinMC
  • 2017年04月28日 22:27
  • 370

使用Android Accessibility实现免Root自动批量安装功能

对于国内Android设备,应用的自动批量安装/更新一直是一个痛点,在之前,第三方应用商店通常要求设备Root,然后调用系统的PackageManagerService命令行来实现后台安装。最近,豌豆...

Android Accessibility学习

许多Android用户有不同的需求,要求它们以不同的方式与他们的Android设备进行交互。这包括用户视觉、物理或年龄的限制,为了他们能完全看到或使用触摸屏,以及听力损失的用户能感知到声音和警报信息。...

android Accessibility service

偶然间看到了这篇文章,http://www.pingwest.com/kill-process-in-a-smart-way/,虽然对百度的产品没有太大的兴趣,但是它的超强加速还是挺吸引人的,想研究一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android Accessibility API的研究与应用(一)
举报原因:
原因补充:

(最多只允许输入30个字)