Android Accessibility实现程序锁功能

Android一键锁屏与抬手亮屏的实现 Android一键锁屏与抬手亮屏的实 . 介绍 最近由于项目需要开发语音控制相关的功能,需要用语音来实现锁屏和唤醒屏幕的功能,所以顺便就想开发一个“一键锁屏”的App。主要是我用的手机那个双击亮屏使用起来太麻烦了,而且又不想按电源键。(主要是因为太穷了,买不起手机O(∩_∩)O哈哈~) . . 锁屏实现一 主要是基于 DeviceAdminReceiver,安卓的设备管理器来实现一键锁屏的功能 . 1. 创建AdminManageReceiver类并继承DeviceAdminReceiver pub 阅读详情

之前在做卫士项目的时候,做程序锁的时候,遇到一个问题。
以往做程序锁的时候,我们都会选择开启一个后台服务,然后在服务中不断获取当前运行的栈信息,提取栈顶的packageName来判定当时运行的程序是否为锁程序。
但这种方式在API21之后不能用了,因为getRunningTasks这个方法在API21已经被弃用了。在Android 5.1的系统也不支持此种方式。


  • 但别着急,在5.1版本后我们还有另一种方式来实现程序锁的功能。那就是Android的Accessibility功能。
  • 官方文档是这样介绍的,渣英语翻译:对于那些由于视力、听力或其它身体原因导致不能方便使用Android智能手机的用户,Android提供了Accessibility功能和服务帮助这些用户更加简单地操作设备,包括文字转语音、触觉反馈、手势操作、轨迹球和手柄操作。开发者可以搭建自己的Accessibility服务,这可以加强可用性,例如声音提示,物理反馈,和其他可选的操作模式。

今天我们使用这个功能实现程序锁功能。


1、第一步,在Android Manifest.xml文件中注册:

<service
            android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
            android:name=".service.LockService"
            android:label="程序锁" >
            <intent-filter>
                <action android:name="android.accessibilityservice.AccessibilityService" />
            </intent-filter>
            <meta-data
                android:name="android.accessibilityservice"
                android:resource="@xml/accessibility_service_config" />
        </service>

其中label就是此功能在辅助功能里的名字,这里写图片描述
如上,而android:name:指的就是代码中服务了。

2.完成xml文件夹的accessibility_service_config:

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:description="@string/accessibility_service_description"
    android:accessibilityEventTypes="typeWindowStateChanged"
    android:accessibilityFeedbackType="feedbackGeneric"
    />

    <!-- 
    android:description : 描述信息
    监听的事件类型
    发生这个事件之后,如何反馈 -->

其中的description指的就是此功能的描述,这个自己添加就可以了。

3、服务中的代码完成程序锁的功能,这里的LockService需要继承AccessibilityService
- 此类最少需要实现两个方法:
一. onAccessibilityEvent(AccessibilityEvent event):
响应AccessibilityEvent的事件,在用户操作的过程中,系统不断的发送sendAccessibiltyEvent(AccessibilityEvent event);然后通过onAccessibilityEvent()可以捕捉到该事件,然后分析。
二.public void onInterrupt():打断获取事件的过程,本例中暂不适用。

package com.jadyn.mobilesafe.service;

import android.accessibilityservice.AccessibilityService;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;

import com.jadyn.mobilesafe.activity.DogCheckActivity;
import com.jadyn.mobilesafe.dao.AppLockDao;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by JadynAi on 2016/3/24.
 */
public class Dog2Service extends AccessibilityService {
    protected static final String TAG = "Dog2Service";
    private List<String> mLockInfos;

    //这个集合是用于存储验证过的应用
    private List<String> mVerifyList = new ArrayList<>();
    private VerifyReceiver mVerifyReceiver ;
    LockScreenReceiver mLockScreenReceiver;

    AppLockDao mDao ;

    @Override
    public void onCreate() {
        super.onCreate();
        mDao = new AppLockDao(this);
        mLockInfos = mDao.query();
        registerReceiver();
    }

    //当发生改变的时候调用的代码
    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        String packageName = (String) event.getPackageName();
        Log.d(TAG, "PACKAGENAME==="+packageName);
        //如果目前这个包名在验证过的集合中,那么就跳过下面的代码
        if(mVerifyList.contains(packageName)){
            return;
        }

        //判断从数据库查询出来的集合中有没有这个包名存在。
        if(mLockInfos.contains(packageName)){
            Log.d(TAG, "加锁程序: PACKAGEnAME = "+packageName );

            Intent intent = new Intent(Dog2Service.this , DogCheckActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.putExtra("packagename", packageName);
            startActivity(intent);
        }else{
            Log.d(TAG, "未加锁程序: PACKAGEnAME = "+packageName );
        }
    }

    @Override
    public void onInterrupt() {

    }


    private void registerReceiver() {

        registerVerifyReceiver();

        registerLockScreenReceiver();


        //接收数据库改变的通知
        Uri uri = Uri.parse("safe://com.jadyn.moblilesafe.db");
        getContentResolver().registerContentObserver(uri, true, new DbObserver(new Handler()));
    }

    private void registerLockScreenReceiver() {
        mLockScreenReceiver = new LockScreenReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_SCREEN_OFF);
        registerReceiver(mLockScreenReceiver, filter);
    }

    private void registerVerifyReceiver() {
        mVerifyReceiver = new VerifyReceiver();
        IntentFilter filter = new IntentFilter();
        filter.addAction("com.jadyn.mobilesafe.verify");
        registerReceiver(mVerifyReceiver, filter);
    }

    //接收广播
    class VerifyReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            //得到了早前在activity那边验证过的程序包名。
            String packageName = intent.getStringExtra("packagename");

            mVerifyList.add(packageName);
        }
    }

    class LockScreenReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            //重置集合
            mVerifyList.clear();
        }
    }

    class DbObserver extends ContentObserver {

        public DbObserver(Handler handler) {
            super(handler);
        }

        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            //在执行一次查询
            mLockInfos = mDao.query();
        }

    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        //标记着,不要再执行监听了。
        unregisterReceiver(mVerifyReceiver);
        unregisterReceiver(mLockScreenReceiver);
    }
}

此代码中我们注册了两个广播和一个内容观察者。其中VerifyReceiver广播是用来接受验证界面发来的验证通过的广播。
LockScreenReceiver广播接受锁屏广播,用来保证锁屏后,打开程序会重新验证。
DbObserver,用来观察数据库操作类的,增删方法内的修改。

以上

Android startService 启动自动解锁点亮屏幕 <br />看到一个帖,做的笔记,帖子在:http://topic.youkuaiyun.com/u/20110304/15/ae5279b1-692e-48a7-a5b9-0e579a3a6974.html<br />我想记录的是:<br />做提醒功能的一个服务,自动解锁+亮屏。<br />写一个Activity启动该服务即可,用一个线程开启服务,要是黑屏的状态下启动才有效果。<br /><br />import android.app.KeyguardManager;<br />import android.ap 阅读详情

相关推荐

探索Android屏幕锁的实现:源码学习与实践

本文还有配套的精品资源,点击获取 简介:了解如何通过源码研究深入Android系统的安全机制,并学习自定义屏幕锁。本项目包含实现Android屏幕锁定功能的代码,涉及权限管理、KeyguardManager服务、WindowManager、Activity和Service的交互、自定义解锁方式、BroadcastReceiver的使用、电源管理和唤醒锁、Android安全框...

weixin_29323977的博客 1567

AccessibilityService简介

目录用 [TOC]来生成目录:目录 简介 配置 Manifestxml配置 配置辅助服务 在代码中配置 在xml文件中配置 配置实现类 实操简介AccessibilityService是一个辅助类,可以监听我们手机的焦点,窗口变化,按钮点击等等。实现它的服务需要在手机设置里面->辅助功能在这里面找到你自己实现的辅助类,然后打开它就可以进行我们一系列的监听了。还可以对监听的对象进行一些脚本的操作。配置

维斯特洛(Westeros)大陆 6442

深入解析MOS管电容特性:从基础理论到高频应用

本文深入解析了MOS管的电容特性,从基础物理结构出发,详细拆解了栅氧电容、重叠电容和结电容的成因与影响。文章重点探讨了电容值随工作状态变化的非线性特性,并分析了其在CMOS高频开关电源、射频电路等应用中的关键作用,包括开关损耗、米勒效应、信号完整性挑战以及如何将电容特性转化为可控元件(如MOS变容管)的机遇。最后提供了从选型、仿真到PCB布局的实战设计指南。

weixin_29278805的博客 381

详解安卓辅助功能服务AccessibilityService(无障碍服务,微信抢红包助手原理)

前言 在手机的更多设置或者高级设置中,我们会发现有个无障碍的功能,很多人不知道这个功能具体是干嘛的,包括我们开发也很少接触这部分功能,以至于对这块不甚了解。前段时间在汉光的安利下去了解了下这部分功能。在这里和大家浅谈下自己对这个功能的理解和部分运用。这边打算从 “是什么,为什么,怎么用,好不好”几个方面来说 提纲 是什么(应用场景,定义,作用) 为什么(原理及源码解析) 怎么用(如何开发无障碍服务) 怎么防(防止无障碍服务外挂的一些做法) 是什么(定位及作用) 为了更好的介绍辅助功能服务,.

WHHGARSKY的博客 1万+

机械拆装-基于Unity-总体设计

建立一个机械装配的场景

唐小墨同学的博客 2774

用Java实现森林冰火人游戏

g.drawString("游戏结束", CELL_SIZE * COLS / 2 - 100, CELL_SIZE * ROWS / 2);g.drawString("难度级别: " + difficultyLevel, 10, CELL_SIZE * ROWS + 60);g.drawString("生命值: " + playerHealth, 10, CELL_SIZE * ROWS + 20);setTitle("森林冰火人");

2401_82778412的博客 1734

Android辅助功能(Accessibility)简介

Android辅助功能(Accessibility)简介 Accessibility 由于部分安卓用户在身体的问题致使他们不能看完整的屏幕或者使用触屏,google提供了Accessibility功能和服务帮助这些用户更加简单地操作设备。这其中最主要的一个类就是AccessibilityService,AccessibilityService是一个系统服务,它运行在后台,并且能够收

踏花忆锦年的博客 1万+

用AI免费制作30分钟电影:完整工作流与实操解析

AI视频生成技术正大幅降低影视创作门槛,但真正制作一部完整电影并非一键生成,而是涉及剧本、分镜、画面、配音、剪辑的复杂流水线。理解其基本原理,是将文本转化为连续视觉叙事的关键。对于创作者而言,掌握角色一致性控制、素材批量管理、免费额度合理分配等技术价值,能有效避免生成结果崩坏与资源浪费。该能力可广泛应用于短视频创作、独立电影预演、教学演示等场景。本文以30分钟AI电影制作为例,拆解从工具选择到成片输出的全流程,重点分析免费方案下的时间与积分成本,以及最容易翻车的环节,并给出基于实践验证的排查与优化策略。

weixin_29056865的博客 326

android底部上滑锁屏

各种测试,各种查资料,总算解决了底部上滑锁屏功能的实现。一个底部三大金钢折腾死个人。最后借助的还是AccessibilityService实现。因为我想实现的底部导航栏一定要显示在屏幕最底端,就算有三大金刚navigationbar,也要置于其顶层。为什么不用 TYPE_APPLICATION_OVERLAY 因为底部导航栏三大金钢挡住无法接收触发事件。

曲幽 1424

Python 爬虫实战:简易爬取知乎回答内容

本文详细介绍了使用Python爬取知乎回答内容的实战方法。通过分析知乎异步加载API接口,讲解如何构建带反爬策略的爬虫代码,包括请求头设置、JSON数据解析和内容清洗等核心步骤。文章提供了完整可运行的代码示例,并针对多页爬取、数据保存和反爬升级给出优化建议。同时强调爬虫使用的合规性,帮助新手快速掌握动态网页爬取的核心技巧,实现从静态到动态网页爬虫的进阶。

2503_91057718的博客 2196

020、Sensor 供电设计:AVDD、DVDD、IOVDD 的上电时序与纹波要求

本文总结了图像传感器(Sensor)供电设计中的关键要点与常见问题:1. 三路供电特性差异:AVDD(模拟供电)对纹波最敏感(通常<30mVpp),DVDD需应对大电流瞬态变化,IOVDD需满足MIPI接口电压稳定要求。2. 上电时序至关重要,应遵循"模拟→数字→IO"的启动顺序,时序偏差可能导致初始化失败。3. 纹波控制需合理选择电容组合(如10μF+0.1μF),注意布局走线及电容ESR/ESL特性。4. 调试建议使用示波器多通道测量时序和纹波,重点关注传感器启动瞬间的电源特性。5. 经验教训包括预留设

sundong_81的博客 523

从零开始安卓无障碍服务Accessibility

从零开始无障碍服务 文章目录从零开始无障碍服务前言一、新建项目-选择Empty Activity二、新建BaseService类和AccessService类1. BaseService类2. AccessService类三、修改AndroidManifest.xml1. 添加AccessibilityService配置2. 添加allocation.xml配置文件四、修改MainActivity类 前言 以前安卓root权限很容易获取的时候,可以写一些日常工作批处理的助手工具,而现在的安卓手机权限管

暗黑@魔心 6072

把 LLM 编排能力塞进 ABAP 系统里,ZLLM 仓库的工程价值与 SAP 落地场景

ZLLM项目将LLM应用开发中的常见工程问题引入ABAP原生环境,为SAP系统提供AI工作流构建能力。它类似ABAP版的LangChain,支持Chain组合、Prompt模板、状态传递等核心功能,强调纯ABAP实现、延迟执行以及与ABAP数据结构的深度集成。项目包含工厂类、LLM客户端、负载均衡器等模块,特别设计了能处理ABAP内表和结构的模板引擎,使业务数据可直接用于Prompt生成。通过Step和Flow机制支持复杂业务过程编排,并采用延迟执行和并行处理优化批量任务性能。该项目为ABAP开发者提供了在

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 61

android 权限大全

访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限  获取错略位置 android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米  获取精确位置 android.permiss

2472

华为OD机试真题 新系统【小花获胜的奶茶】

华为OD机试真题 新系统【小花获胜的奶茶】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【小花获胜的奶茶】多语言题解。

qq_45776114的博客 382

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Android手机防沉迷软件的基本原理

(现在手机游戏、短视频等不仅对小孩子负面影响巨大,连很多成年人都沉迷其中难以自拔,影响工作、生活、学习。这已经造成全社会性的巨大影响,长此以往,国将不国。本人仅在此以自己掌握的些许技术略尽绵薄之力,希望能抛砖引玉,更希望能有具备大能力的各方有识之士力挽狂澜,成我所之不能。欢迎加微交流84378495)

徘徊的风 2089

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

安卓辅助功能(无障碍)AccessibilityService实战介绍

简要介绍 AccessibilityService是安卓平台上提供的无障碍服务,用于帮助残障人士使用手机,不过通过此功能可以完成很多事情.可以进行模拟界面操作,如点击界面上某个按钮等. 使用详细步骤 增加service定义 在onAccessibilityEvent函数中进行相应操作(安卓界面有变化时,都会调用此函数) class MyAccessibilityService : Access...

蓝不蓝编程 7149

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android Accessibility安卓辅助功能开发总结

Android Accessibility开发 参考: https://blog.youkuaiyun.com/qq_15784961/article/details/72742199 Android Accessibility是google开放的为无障碍辅助开发的api。 AccessibilityService是一个可以继承的Service类,注册后,系统会把配置监测的应用行为,通知给这个service。 开发步骤: 一、新建类继承AccessibilityService,主要实现下列方法 onAccessibi

get_moon的博客 2891

AccessibilityService 怎么用呢?

AccessibilityService

T927760703的博客 1111

Android Accessibility知识分享

但是目前的实现就是先读了左边,再读右边,那么如果用户是连续的滑动,那或许还能听懂5的意思,那万一是隔了好一会才滑过去的,只听到5的话,就不知所谓了。用这个属性来描述我们的视图,如果我们的组件是继承或是Button类型,那么我们的screen reader会识别出它是按钮,并且告诉用户可以点击去激活它。打开扫描器后,打开我们的app,此时会有一个蓝色按钮,点击它,扫描器就会扫描我们的app,然后就会给出结果,还要修改的建议。如果我们想screen reader跳过这个元素,移动到下一个,那么我们就可以将其。

weixin_40763897的博客 2552

android 辅助功能(无障碍) AccessibilityService的生命周期

我看很多文章都没讲,在设置页面给应用授予无障碍权限的那一刻,注册的服务就会被启动并且执行的方法为onCreate()->onServiceConnected(),所以也可以在oncreate里面进行初始化操作,在无障碍权限被关闭的时候会调用onInterrupt()。 ...

ewqweqwe1111的博客 2748

浅谈Android辅助功能 AccessibilityService

1 定义 Accessibility是叫“辅助功能”或者叫“无障碍”。对于那些由于视力、听力或其它身体原因导致不能方便使用Android智能手机的用户,Android提供了Accessibility功能和服务帮助这些用户更加简单地操作设备,包括文字转语音(不支持中文)、触觉反馈、手势操作、轨迹球和手柄操作。开发者可以搭建自己的Accessibility服务,这可以加强可用性,例如声音提示,物理反...

子云心的博客 4285

使用AccessibilityService(无障碍服务)自动完成手机设置功能

今天是19年1月30日,又要过年了,也是各个微信、qq群红包狂轰滥炸开启之际。在应用市场搜索微信红包助手,相关功能的app层出不穷。实际上红包助手实现原理就只是一个android官方自带的AccessibilityService(无障碍服务)。感谢安卓的开源精神,百度一下,会不费吹灰之力搜到实现自动抢红包功能的源码,当然,这篇文章不会又再次Crtl+C,crtl+V的介绍一遍。 项目的需求是用户打...

进阶的zzc的博客 1万+

简单使用 Accessibility 及 Android 适配 TalkBack,实现适老化和无障碍

前言:工信部发布的互联网应用适老化及无障碍改造的通知,app 需要进行改造,以提高老年人或者视障人士在使用 app 过程的便捷性,改造的内容包括但不限于 1、UI 界面更简单、整洁(界面元素不能过于复杂,字体字号需要偏大、清晰) 2、页面焦点导航的适配 3、页面元素需要适配 TalkBack 朗读 4、搭建无障碍服务 service 关于界面文字字号大小的选择的,我前面发过文章介绍过方案,今天主要讲讲 android 中 Accessibility 相关使用以及其他一些简单的改造。 一、给控件加

Jacinth40的博客 1万+

Android-无障碍服务(AccessibilityService)

什么是无障碍服务? 无障碍服务(AccessibilityService)是一套可以模拟操作的系统级别的API。用户同意我们的应用获取无障碍服务的权限之后就可以模拟操作,来控制用户的手机。无障碍被广泛用于抢红包、自动回复、一键获取权限等应用中。 无障碍服务的好处很多,可以实现一键操作,帮助残障人士使用手机。当然坏处也有,开启无障碍服务以后,因为服务对手机的实时监控,会引起手机的卡顿。这个怎么优化我们待会会说到。 无障碍服务文档和说明 以下我将结合各大博主的文章、Google官方文档对无障碍服务进行一

Jason_Lee155的博客 1万+

android getevent 代码,Java AccessibilityEvent.getPackageName方法代码示例

import android.view.accessibility.AccessibilityEvent; //导入方法依赖的package包/类@Overridepublic void onAccessibilityEvent(AccessibilityEvent event) {//虚拟手机按键处理,优先级高于是否点击分词的判断if ((event.getEventType() == TYPE...

weixin_35763787的博客 436
上一篇: Android Studio下简单编译AIDL方法
下一篇: 自定义View——神之ViewDragHelper实现ListView滑动删除
AiLoiii
博客等级 码龄11年 15粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值