android通过辅助功能收集数据

来源:互联网 发布:家庭网络如何共享文件 编辑:程序博客网 时间:2024/06/05 06:21

android 通过辅助功能收集数据

顶着雷的一篇文章。

大家都知道android是有辅助功能的,开启位置在:设置->辅助功能。很多的app也会申请辅助功能的权限。像应用宝,手机管家,360… … 。

可辅助功能能做的事情不仅仅是能帮我们自动安装app那么简单,今天的这篇博文介绍的是通过android辅助功能收集手机界面的数据。

我这个程序包括3个部分:

  • 1app(通过辅助功能收集手机数据,并且上传到server)
  • 2server(缓存app上传的数据)
  • 3html(展示server缓存的数据)

第一部分app开发

这个app我已经上传到github上,地址是:
https://github.com/44xiao44/myaccessibility

开发这个app主要包括以下部分;

1配置文件

首先在AndroidManifest.xml中配置service

<service  android:name=".MyService"  android:enabled="true"  android:exported="true"  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/accessibility_config" /></service>

可以看到在service中引用了一个配置文件@xml/accessibility_config,这个是配置辅助功能的配置文件
我的配置如下:

<?xml version="1.0" encoding="utf-8"?><accessibility-service    xmlns:android="http://schemas.android.com/apk/res/android"    android:accessibilityEventTypes="typeAllMask"    android:accessibilityFeedbackType="feedbackGeneric"    android:accessibilityFlags=""    android:canRetrieveWindowContent="true"    android:description="@string/accessibility_service_description"    android:notificationTimeout="100" />

android:accessibilityEventTypes=”typeAllMask”
这个用来设置响应事件的类型,typeAllMask就是响应所有类型的事件了。还可以配置以下事件类型:
可选类型

android:accessibilityFeedbackType=”feedbackGeneric”
这个用来设置回馈给用户的方式,还可以配置如下类型
回馈给用户的方式

android:accessibilityFlags=”“这个用来设置辅助功能标记,在这里我没设置任何标记。

android:canRetrieveWindowContent=”true” 这个用来设置是否可以检索窗口内容,这里我设置为true。

android:description=”@string/accessibility_service_description” 这个用来设置辅助功能描述,也就是在设置页面开启辅助功能显示的描述。

android:notificationTimeout=”100” 这个用来设置响应时间。

2service 实现部分

@Overridepublic void onAccessibilityEvent(AccessibilityEvent event) {    LogNote(event);}

这个方法是接受辅助功能事件的方法。我在这里调用了LogNote方法,LogNote方法把接受的event 转换了json,并发送到了服务端。这里我说明一下。这个event 是个树形结构。我们可以爬树找到根节点。也可以直接通过getRootInActiveWindow()方法获取根节点。

第二部分web server开发

这个server只是作为一个临时存数据的地方,我并没有设计数据库部分,只是把数据存在了内存中,数据随用随取。github地址:
https://github.com/44xiao44/DataServer
这里面设计了3个接口:
1上传一条数据
2获取一条数据
3清空数据
每个接口都是根据设备id进行的操作。 通过
ConcurrentHashMap<String, Queue<String>>
来存储不同设备的数据。
每个设备的数据存在不同的Q中。

第三部分html开发

这里用于展示从手机也没获取的数据。点一次刷新按钮从服务端获取一条数据,然后解析这条数据,同那个div,input 等标签动态画出数据的内容。github 地址:
https://github.com/44xiao44/ShowData

使用步骤

1启动server工程:我的server工程中会循环打印当前存储的数据量:开始启动的时候可以在控制台看到:

map is empty -----------------------

当server中有数据时可以在控制台看到:

ID ZmZmZmZmZmYtY2UyZC02OWEyLWZmZmYtZmZmZmJlNTZjMzEw has : 28------------------------

是的ID后面的内容是:app安装设备的ID
has: 后面的内容是:这个设备上传了多少条数据

2启动app工程: 注意在app页面中先设置serverIP和端口。
然后点击“点击激活应用的辅助功能”,去打开辅助功能。之后在手机中去任意页面都能上传数据了。

3在html页面中设置server 的 ip 端口,还有设备ID后点击下面的“refresh”就能逐帧的获取server 的数据了。

0 0
原创粉丝点击