Android 探究AccessibilityService的秘密
来源:互联网 发布:钓鱼源码大全 编辑:程序博客网 时间:2024/06/03 13:03
辅助功能服务是Android框架的一项功能,旨在为安装在Android设备上的应用程序提供替代的导航反馈给用户。 无障碍服务可以代表应用程序与用户进行通信,例如当用户将盘旋在屏幕的重要区域上时,将文本转换为语音或触觉反馈。
创建您的辅助功能服务
辅助服务可以与普通应用捆绑在一起,也可以作为独立的Android项目创建。 在这两种情况下,创建服务的步骤是相同的。 在你的项目中,创建一个扩展AccessibilityService
的类。
/** * Created by xiaolong on 2017/6/6. */public class MyAccessibilityService extends AccessibilityService { @Override public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) { } @Override public void onInterrupt() { }}
像任何其他服务一样,您也可以在清单文件中声明它。 记住要指定它处理android.accessibilityservice意图,以便在应用程序触发AccessibilityEvent
时调用该服务。
<service android:name=".MyAccessibilityService"> <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService"/> </intent-filter></service>
如果您为此服务创建了一个新项目,并且不打算提供应用程序,则可以从源代码中删除启动器Activity类(通常称为MainActivity.java)。 记住还要从清单中删除相应的活动元素。
配置您的辅助功能服务
设置辅助功能服务的配置变量会告诉系统您希望运行的方式和时间。 您想要回应哪些事件类型? 服务应该对所有应用程序有效,还是只有特定的软件包名称? 它使用什么不同的反馈类型?
我们有两种方法来设置这些变量。 向后兼容的选项是使用setServiceInfo(android.accessibilityservice.AccessibilityServiceInfo)
在代码中去配置。 为此,重写onServiceConnected()
方法并在其中配置你的服务。
@Override protected void onServiceConnected() { super.onServiceConnected(); //获取实例 AccessibilityServiceInfo info = new AccessibilityServiceInfo(); //设置此服务想要收听的事件的类型。 其他不会传递给这个服务。 info.eventTypes = AccessibilityEvent.TYPE_VIEW_CLICKED | AccessibilityEvent.TYPE_VIEW_FOCUSED; //如果您只希望此服务与特定应用程序一起使用,请设置它们包名称在这里。 //否则,当服务激活时,它将会收听来自所有应用程序的事件。 info.packageNames = new String []{"com.ooowin.yixue.accessibilityservicetext"}; //设置您的服务将提供的反馈类型。 info.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN; //仅当没有包特定的服务时才调用默认服务为生成的AccessibilityEvent类型。 // 这个服务是应用程序特定,因此标志不是必需的。 如果这是一个通用服务,值得考虑设置 //DEFAULT标志 //info.flags = AccessibilityServiceInfo.DEFAULT; info.notificationTimeout = 100; this.setServiceInfo(info); }
第二个方法是使用XML文件配置服务。 某些配置选项(如canRetrieveWindowContent )仅在使用XML配置服务时可用。 以上使用XML定义的相同配置选项将如下所示:
<?xml version="1.0" encoding="utf-8"?><accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes="typeViewClicked|typeViewFocused" android:packageNames="com.ooowin.yixue.accessibilityservicetext" android:accessibilityFeedbackType="feedbackSpoken" android:notificationTimeout="100" android:canRetrieveWindowContent="true"/>
这时候我们需要在清单文件中引用它,方法是在您的服务声明中添加一个指向XML文件的标签。
<service android:name=".MyAccessibilityService" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"> <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService"/> </intent-filter> <meta-data android:name="android.accessibilityservice" android:resource="@xml/accessibilityservice" /></service>
请求允许BIND_ACCESSIBILITY_SERVICE
权限,确保只有系统可以绑定到它。
响应可访问性事件
现在我们就可以通过AccessibilityEvent.getEventType()
来确定事件的类型从而做出一系列操作。
int eventType = accessibilityEvent.getEventType(); switch(eventType){ case AccessibilityEvent.TYPE_VIEW_CLICKED: Log.d("TAG","获取点击事件的响应"); break; case AccessibilityEvent.TYPE_VIEW_FOCUSED: Log.d("TAG","获取焦点的响应"); break; }
结束语
利用AccessibilityService我们可以在手机非root的情况下实现静默安装的功能(不是真正的静默安装)和现在很多人都知道的抢红包功能。如果你想利用此方法获取一些个人隐私,我劝你还是打消这个念头吧,因为不可能,哈哈。
- Android 探究AccessibilityService的秘密
- android AccessibilityService的用法
- 深入探究INF的秘密
- android-AccessibilityService
- Android AccessibilityService
- Android开发中AccessibilityService的使用
- Android开发中AccessibilityService的使用
- android AccessibilityService的学习和应用
- android.accessibilityservice包介绍
- Android AccessibilityService 使用详解
- Android AccessibilityService使用注意
- Android AccessibilityService源码分析
- android开发之AccessibilityService
- android AccessibilityService解析
- android:name 的秘密
- 深入探究Windows系统中INF的秘密
- 探究软件巨头管理与成长的秘密
- Android中AccessibilityService(辅助类服务)的用法
- Poj 2594 Treasure Exploration【可相交最小路径覆盖】
- 机器学习中的损失函数总结
- tab切换重新渲染Echarts图表
- Android onNewIntent()使用
- duilib——从XML文件中加载界面
- Android 探究AccessibilityService的秘密
- PHP执行python脚本的passthru()函数使用及注意事项总结
- Android布局
- lct学习小记
- HTTP协议原理
- DBNull.Value
- 出现这个 python: can't open file 'manage.py': [Errno 2] No such file or directory
- 不同JDK版本ArrayList 容量扩充问题
- 做web 项目的几点感悟