Android辅助功能
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辅助功能的更多相关文章
- Android辅助功能原理与基本使用详解-AccessibilityService
辅助功能原理与基本使用详解 本文主要介绍辅助功能的使用 辅助功能基本原理 辅助功能基本配置和框架搭建 辅助功能实战解析 辅助功能基本原理 辅助功能(AccessibilityService)其实是 ...
- 【转】Android辅助功能AccessibilityService自动全选择文字粘贴模拟输入
网上找了很久AccessibilityService全选文字的方法,一直没找到,自己研究了半天,分享出来. /** * 输入文本 */ public void inputText(List<St ...
- Android通过辅助功能实现抢微信红包原理简单介绍
简书文章:https://www.jianshu.com/p/e1099a94b979 附抢红包开源项目地址,代码已全改为Kotlin了,已适配到最新微信7.0.5版本,如果对你有所帮助赏个star吧 ...
- Android程序中--不能改变的事情
有时,开发人员会对应用程序进行更改,当安装为以前版本的更新时出现令人惊讶的结果 - 快捷方式断开,小部件消失或甚至根本无法安装. 应用程序的某些部分在发布后是不可变的,您可以通过理解它们来避免意外. ...
- 【腾讯Bugly干货分享】Android进程保活招式大全
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ac4a0ea374c75371c08ce8 作者:腾讯——张兴华 目前市面上 ...
- Android Secret Code
我们很多人应该都做过这样的操作,打开拨号键盘输入*#*#4636#*#*等字符就会弹出一个界面显示手机相关的一些信息,这个功能在Android中被称为android secret code,除了这些系 ...
- 一个五年 Android 开发者百度、阿里、聚美、映客的面试心经
花絮 也许会有人感叹某些人的运气比较好,但是他们不曾知道对方吃过多少苦,受过多少委屈.某些时候就是需要我们用心去发现突破点,然后顺势而上,抓住机遇,那么你将会走向另外一条大道,成就另外一个全新的自我. ...
- Android驱动开发5-8章读书笔记
Android驱动开发读书笔记 第五章 S5PV210是一款32位处理器,具有 ...
- [Bug] 解决透明 Activity 在 Android 6.0 背景不透明
如何复现 连续启动两个 Activity ,其中 Activity 1 为 不透明 的 Activity Activity 2 为 透明 的 Activity 通常用于引导页面,例如:豌豆夹锁屏引导用 ...
- android 布局学习
各种layout用到的一些重要属性 第一类:属性值为true或false android:layout_centerHrizontal 水平居中 android:layout_centerVertic ...
随机推荐
- Gitbook Android App
最有用Ionic 2 做了一个Gitbook 混合app, 上线google play的时候提醒我触犯了假冒行为,可能是logo和名字问题吧,放弃: 上线腾讯被认为是h5 app,不是native a ...
- JUC并发编程(4)—ThreadLocal介绍(超详细 集大成版本!!!)
目录 ThreadLocal简介 ThreadLocal与Synchronized的区别 ThreadLocal API ThreadLocal的使用案例 阿里ThreadLocal规范 Thread ...
- 9.1 运用API创建多线程
在Windows平台下创建多线程有两种方式,读者可以使用CreateThread函数,或者使用beginthreadex函数均可,两者虽然都可以用于创建多线程环境,但还是存在一些差异的,首先Creat ...
- 如何配置.h头文件include“”相对路径
编译工程时,找的是当前main.c文件下的.h文件,如果当前路径下没有就会报错,当前路径用.\表示,上一级目录用..\表示. 如果你的main.h文件在main.c的上一级目录中Include 文件夹 ...
- LSP 链路状态协议
转载请注明出处: 链路状态协议(Link State Protocol)是一种在计算机网络中用于动态计算路由的协议.它的主要作用是收集网络拓扑信息,为每个节点构建一个准确的网络图,并基于这些信息计算出 ...
- 深挖 Python 元组 pt.1
哈喽大家好,我是咸鱼 好久不见甚是想念,2023 年最后一次法定节假日已经结束了,不知道各位小伙伴是不是跟咸鱼一样今天就开始"搬砖"了呢? 我们知道元组(tuple)是 Pytho ...
- PostgreSQL快速导入千万条数据
目录 一.测试环境 二.修改源数据为COPY可用的格式 三.DDL 四.COPY 五.结论 为了与MySQL做个对比,做一个PG的数据导入测试,使用COPY方式,测试环境保持一致,具体如下所述. 一. ...
- 软件开发人员 Kubernetes 入门指南|Part 1
Kubernetes 是一个用于部署和管理容器的编排系统.使用 Kubernetes,用户可以通过自动执行管理任务(例如在跨节点间扩展容器并在容器停止时重新启动任务),在不同环境中可靠地运行容器. K ...
- DHorse v1.4.2 发布,基于 k8s 的发布平台
版本说明 优化特性 在集群列表增加集群版本: 修改Jvm的GC指标名: 解决问题 解决shell脚本换行符的问题: 解决部署历史列表页,环境名展示错误的问题: 解决指标收集功能的异常: 升级指南 升级 ...
- 【Unity3D】水面特效
1 前言 水波特效 中通过屏幕后处理实现了环形水波效果,本文通过 Shader Graph 实现了模拟水面特效,包含以下特效细节.Shader Graph 基础知识详见→Shader Graph简 ...