android通过辅助功能收集数据

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 实现部分

@Override
public 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 的数据了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值