1:AccessibilityService

新建service

public class AccessibilityService extends android.accessibilityservice.AccessibilityService {
private static final String TAG = "AccessibilityService"; @Override
public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) {
Log.i(TAG, "onAccessibilityEvent: " + accessibilityEvent.getEventType());
Log.i(TAG, "onAccessibilityEvent: event className:"+accessibilityEvent.getClassName());
} @Override
public void onInterrupt() {
Log.i(TAG, "onInterrupt:");
}
}

这里暂时先只添加日志输出。

2:注册service

        <service android:name=".AccessibilityService"
android:label="@string/app_name"
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/phone_accessibility" />
</service>

3: 添加resource

<?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:canPerformGestures="true"
android:canRetrieveWindowContent="true"
android:description="@string/accessibility_desc"
android:notificationTimeout="100" />

4: 开启辅助功能

  Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
startActivity(intent);

5:功能实现

这里简单的实现下打开oppo相机后的自动点击拍照。

这里可以编写onAccessibilityEvent方法中的代码了。

 Log.i(TAG, "onAccessibilityEvent: " + accessibilityEvent.getEventType());
Log.i(TAG, "onAccessibilityEvent: event className:"+accessibilityEvent.getClassName());
//校验版本
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2){
return;
}
//获取nodeinfo
AccessibilityNodeInfo rootInActiveWindow = getRootInActiveWindow();
if (rootInActiveWindow==null){
Log.i(TAG, "onAccessibilityEvent: rootInActiveWindow is null" );
return;
}
//获取当前的classname, 是相机的话执行
if (accessibilityEvent.getClassName().equals("com.oplus.camera.Camera")){
//根据相机拍照按钮的id(monitor中获取ViewId)
List<AccessibilityNodeInfo> shutter_button = rootInActiveWindow.findAccessibilityNodeInfosByViewId("com.oplus.camera:id/shutter_button");
if (shutter_button!=null){
for (AccessibilityNodeInfo accessibilityNodeInfo : shutter_button) {
//执行点击事件
accessibilityNodeInfo.performAction(AccessibilityNodeInfo.ACTION_CLICK);
Toast.makeText(getApplicationContext(),"自动点击成功",Toast.LENGTH_LONG).show();
}
}
}

Android辅助功能的更多相关文章

  1. Android辅助功能原理与基本使用详解-AccessibilityService

    辅助功能原理与基本使用详解 本文主要介绍辅助功能的使用 辅助功能基本原理 辅助功能基本配置和框架搭建 辅助功能实战解析 辅助功能基本原理   辅助功能(AccessibilityService)其实是 ...

  2. 【转】Android辅助功能AccessibilityService自动全选择文字粘贴模拟输入

    网上找了很久AccessibilityService全选文字的方法,一直没找到,自己研究了半天,分享出来. /** * 输入文本 */ public void inputText(List<St ...

  3. Android通过辅助功能实现抢微信红包原理简单介绍

    简书文章:https://www.jianshu.com/p/e1099a94b979 附抢红包开源项目地址,代码已全改为Kotlin了,已适配到最新微信7.0.5版本,如果对你有所帮助赏个star吧 ...

  4. Android程序中--不能改变的事情

    有时,开发人员会对应用程序进行更改,当安装为以前版本的更新时出现令人惊讶的结果 - 快捷方式断开,小部件消失或甚至根本无法安装. 应用程序的某些部分在发布后是不可变的,您可以通过理解它们来避免意外. ...

  5. 【腾讯Bugly干货分享】Android进程保活招式大全

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ac4a0ea374c75371c08ce8 作者:腾讯——张兴华 目前市面上 ...

  6. Android Secret Code

    我们很多人应该都做过这样的操作,打开拨号键盘输入*#*#4636#*#*等字符就会弹出一个界面显示手机相关的一些信息,这个功能在Android中被称为android secret code,除了这些系 ...

  7. 一个五年 Android 开发者百度、阿里、聚美、映客的面试心经

    花絮 也许会有人感叹某些人的运气比较好,但是他们不曾知道对方吃过多少苦,受过多少委屈.某些时候就是需要我们用心去发现突破点,然后顺势而上,抓住机遇,那么你将会走向另外一条大道,成就另外一个全新的自我. ...

  8. Android驱动开发5-8章读书笔记

    Android驱动开发读书笔记                                                              第五章 S5PV210是一款32位处理器,具有 ...

  9. [Bug] 解决透明 Activity 在 Android 6.0 背景不透明

    如何复现 连续启动两个 Activity ,其中 Activity 1 为 不透明 的 Activity Activity 2 为 透明 的 Activity 通常用于引导页面,例如:豌豆夹锁屏引导用 ...

  10. android 布局学习

    各种layout用到的一些重要属性 第一类:属性值为true或false android:layout_centerHrizontal 水平居中 android:layout_centerVertic ...

随机推荐

  1. 【项目源码】基于JavaEE的健康管理系统

    随着网络技术的不断发展,网站的开发与运用变得更加广泛.这次采用java语言SSH框架(Spring,Struts,Hibernate)设计并实现了面向特定群体的健康管理平台.该网站主要有教师饮食管理. ...

  2. 线段树hdu-4027

    Smiling & Weeping   ---- 姑娘,倘若,我双手合十的愿望里有你呢 Problem Description A lot of battleships of evil are ...

  3. Redis最常见的5种应用场景

    Redis作为当今最流行的内存数据库,已经成为服务端加速的必备工具之一.对于Redis为什么那么快?以及Redis采用单线程,但为什么反而获得更高的性能的疑问,在之前的Redis为什么那么快?一文中, ...

  4. Python并发编程——协程、Greenlet模块、Gevent模块、Gevent之同步与异步、Gevent应用

    文章目录 一 引子 二 协程介绍 三 Greenlet 四 Gevent介绍 五 Gevent之同步与异步 六 Gevent之应用举例一 七 Gevent之应用举例二 一 引子 本节的主题是基于单线程 ...

  5. Python shape+size详解

    import cv2 from PIL import Image # pic.JPG 图片的路径 img = cv2.imread("pic.JPG",-1) print(&quo ...

  6. Python+Softmax+MNIST

    # -*- coding: utf-8 -*- """ 用神经网络搭建的softmax线性分离器 Softmax是用于分类过程,用来实现多分类的,简单来说,它把一些输出的 ...

  7. ciscn_2019_c_1 题解

    main函数如下: int __cdecl main(int argc, const char **argv, const char **envp) { int v4; // [rsp+Ch] [rb ...

  8. 从零用VitePress搭建博客教程(2) –VitePress默认首页和头部导航、左侧导航配置

    2. 从零用VitePress搭建博客教程(2) –VitePress默认首页和头部导航.左侧导航配置 接上一节: 从零用VitePress搭建博客教程(1) – VitePress的安装和运行 四. ...

  9. 一键修改IP多实例

    一键修改IP多实例-v1 #!/bin/bash #2020-03-01 #auto change ip #By Flyaway ###################### grep "d ...

  10. 网格布局grid

    起因 昨天面试的时候,出了一道面试题,模拟面试公司的列表的元素宽度伸缩变化,根据屏幕大小的不同,一行上放置最多的元素,元素宽度不固定,间距固定,可换行,靠左对齐,当时猜出来用flexjs监听resiz ...