android从服务检查,android开发分享Android:你如何检查是否启用了特定的AccessibilityService...

我最后自己做了这个:

public boolean isAccessibilityEnabled(){ int accessibilityEnabled = 0; final String LIGHTFLOW_ACCESSIBILITY_SERVICE = "com.example.test/com.example.text.ccessibilityService"; boolean accessibilityFound = false; try { accessibilityEnabled = Settings.Secure.getInt(this.getContentResolver(),android.provider.Settings.Secure.ACCESSIBILITY_ENABLED); Log.d(LOGTAG, "ACCESSIBILITY: " + accessibilityEnabled); } catch (SettingNotFoundException e) { Log.d(LOGTAG, "Error finding setting, default accessibility to not found: " + e.getMessage()); } TextUtils.SimpleStringSplitter mStringColonSplitter = new TextUtils.SimpleStringSplitter(':'); if (accessibilityEnabled==1){ Log.d(LOGTAG, "***ACCESSIBILIY IS ENABLED***: "); String settingValue = Settings.Secure.getString(getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES); Log.d(LOGTAG, "Setting: " + settingValue); if (settingValue != null) { TextUtils.SimpleStringSplitter splitter = mStringColonSplitter; splitter.setString(settingValue); while (splitter.hasNext()) { String accessabilityService = splitter.next(); Log.d(LOGTAG, "Setting: " + accessabilityService); if (accessabilityService.equalsIgnoreCase(ACCESSIBILITY_SERVICE_NAME)){ Log.d(LOGTAG, "We've found the correct setting - accessibility is switched on!"); return true; } } } Log.d(LOGTAG, "***END***"); } else{ Log.d(LOGTAG, "***ACCESSIBILIY IS DISABLED***"); } return accessibilityFound; }

从API级别14开始,还可以通过AccessibilityManager获取正在运行的辅助function服务:

public static boolean isAccessibilityEnabled(Context context, String id) { AccessibilityManager am = (AccessibilityManager) context .getSystemService(Context.ACCESSIBILITY_SERVICE); List runningServices = am .getEnabledAccessibilityServiceList(AccessibilityEvent.TYPES_ALL_MASK); for (AccessibilityServiceInfo service : runningServices) { if (id.equals(service.getId())) { return true; } } return false; }

要找出您的和所有安装的辅助function服务的标识,您可以运行以下代码片段:

public static void logInstalledAccessiblityServices(Context context) { AccessibilityManager am = (AccessibilityManager) context .getSystemService(Context.ACCESSIBILITY_SERVICE); List runningServices = am .getInstalledAccessibilityServiceList(); for (AccessibilityServiceInfo service : runningServices) { Log.i(TAG, service.getId()); } }

在我的例子中,ID看起来像org.your.package / .YourAccessibilityService。

到目前为止,该方法工作可靠。

检查服务是否启用

/** * Based on {@link com.android.settingslib.accessibility.AccessibilityUtils#getEnabledServicesFromSettings(Context,int)} * @see AccessibilityUtils */ public static boolean isAccessibilityServiceEnabled(Context context, Class> accessibilityService) { ComponentName expectedComponentName = new ComponentName(context, accessibilityService); String enabledServicesSetting = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES); if (enabledServicesSetting == null) return false; TextUtils.SimpleStringSplitter colonSplitter = new TextUtils.SimpleStringSplitter(':'); colonSplitter.setString(enabledServicesSetting); while (colonSplitter.hasNext()) { String componentNameString = colonSplitter.next(); ComponentName enabledService = ComponentName.unflattenFromString(componentNameString); if (enabledService != null && enabledService.equals(expectedComponentName)) return true; } return false; }

用法:

boolean enabled = isAccessibilityServiceEnabled(context, MyAccessibilityService.class);

检测何时启用或禁用服务

进行callback:

ContentObserver observer = new ContentObserver() { @Override public void onChange(boolean selfChange) { super.onChange(selfChange); boolean accessibilityServiceEnabled = isAccessibilityServiceEnabled(context, MyAccessibilityService.class); //Do something here } };

订阅:

Uri uri = Settings.Secure.getUriFor(Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES); context.getContentResolver().registerContentObserver(uri, false, observer);

完成后取消订阅:

context.getContentResolver().unregisterContentObserver(observer);

请注意,这不适用于getEnabledAccessibilityServiceList()方法,因为它的值与Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES值不同步。 这就是为什么我认为使用Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES是一个更好的“一刀切”的方法。

你能跟踪服务是否正在运行吗? 如果无障碍服务启用不应该也运行?

public class MyAccessibilityService extends AccessibilityService{ public static boolean isEnabled = false; @Override public void onServiceConnected() { isEnabled = true; } @Override public void onDestroy(){ isEnabled = false; }

当您的活动服务刚刚开始时获取ID。 在您的Activity服务OnSeriviceCeonnected后,所有的初始化调用。 用这个…

AccessibilityServiceInfo serviceInfo = this.getServiceInfo(); String accessibilityId = serviceInfo.getId();

需要Jelly Bean API

然后,您可以使用Martin的代码(isAccessibilityEnabled)来检查正在运行的服务。

这需要更多的时间

AccessibilityManager am = (AccessibilityManager) context .getSystemService(Context.ACCESSIBILITY_SERVICE);

AccessibilityManager accessibilityManager = (AccessibilityManager)context.getSystemService(Context.ACCESSIBILITY_SERVICE); List runningservice = accessibilityManager.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_ALL_MASK); accessibilityManager.addAccessibilityStateChangeListener(new AccessibilityManager.AccessibilityStateChangeListener() { @Override public void onAccessibilityStateChanged(boolean b) { Toast.makeText(MainActivity.this, "permission "+b, Toast.LENGTH_SHORT).show(); } });

Listner会在状态改变的时候被调用,你可以跟踪布尔值来检查权限,这是迄今为止最简单和最轻的解决scheme来检查权限

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为云服务怎么弄金卡会员_万科牵手华为终端云服务,共建松山湖智慧商圈

12月18日,坐落在东莞松山湖南华为旁的44000㎡的开放式商业mall——滨湖万科里正式启幕。现场华为终端云服务部还与万科南方区域商业事业部签署了战略合作协议,开启共建智慧商圈的新版图。值得一提的是,这也是华为终端云服务与万科在商业板块的…

cad2014打开文件崩溃_CAD玩的再牛,崩溃了咋办?

导读前几天,一入职新人晚上加班画完的图纸在最后一刻CAD崩溃了!好在最后在临时保存文件夹中找到了完整的图纸。这才免于通宵。CAD崩溃是我们画图中经常遇到的问题。对于CAD崩溃后的处理,相信老司机都已经游刃有余。但也有防不胜防的时候&…

android 弹窗ui,Android 弹出窗口与对话框 UI设计

左图: Android 自带的日期选择弹窗; 右图: Android 自带的时间选择弹窗.左图: Android 日历中的重复选择; 右图: Chrome 中的打印.干净简洁的布局与有趣儿又引人注目的交互让操作变得轻松而愉快, 尤其是那在时间选择器中出现的双环.同样的, 也有很多人试图在自己的应用中给他们…

staruml透明_第05组 团队项目-需求分析报告

组队后的团队项目的整体计划安排(1 2分)序号持续时间主要任务是否完成一9.28组队√二10.1-10.21制作团队选题报告√三10.22-10.27制作团队需求分析报告√四10.28-11.2团队编程准备与制作五10.28-11.11alpha冲刺准备六11.12-11.22进行alpha冲刺,并发布alpha版本七11.…

ffmpeg编译android,FFMPEG Android(2) 编译编译静态ffmpeg可执行文件

基础编译,请参考上一篇文章:http://blog.csdn.net/muwesky/article/details/55259945如果想编译静态ffmpeg可执行文件,编译脚本如下:#!/bin/bashexport TMPDIR/Users/aivensmac/work/project/ffmpeg/armbuild/tmpNDK/Users/aivens…

php5.4.41 绿色_编译安装PHP5.4.41

一、部署LAMP环境,安装顺序二、编译、安装php三、安装xcache,为php(opcode)加速四、其他一、部署LAMP环境,安装顺序编译安装部署LAMP环境,安装顺序3、编译安装php二、编译、安装php1、下载php并解压[rootlocalhost downloads]# wg…

vim反向删除_VIM之操纵缓冲区列表

引子昨天遇到了一个奇怪的问题,一条在Sublime里面看着十分正常的SQL语句,执行了也是正常的,导出的Insert语句也是看着没毛病的,但是在查询出来,传递到下游的时候,说多了一个乱码。WTF,然后就开始…

android studio管理依赖,Android Studio 中的 Gradle 依赖统一管理

在我们的实际项目开发中,通常在一个 Project 项目中会存在多个 Module 的情况,在这些 Module 中会存在一些相同的版本依赖配置,针对进行版本升级的时候需要逐个修改,显得特别麻烦,所以将依赖的配置抽取出来是一个不错的…

卸载 windows_Windows 10可能很快会自动卸载有问题的Windows更新

看起来微软已经悄悄地向Windows 10添加了一项新功能,该功能将允许操作系统自动删除导致问题的任何有问题的Windows更新。这是一个好消息,因为Windows 10最近有一些有问题的更新,其中一些阻止了Windows 10的加载。根据微软刚刚发布的一份新支持…

android 5.0 sd卡读写,如何使用为Android 5.0(Lollipop)提供的新SD卡存取API?

很多好的问题,让我们深入。:)你如何使用它?这是一个伟大的教程与KitKat中的存储访问框架交互:在Lollipop中与新的API交互非常相似。要提示用户选择目录树,您可以启动这样的意图:Intent intent new Intent(Intent.ACTI…

android /data/system/dropbox,Android导出dropbox日志

文章内容已重新排版:Android导出dropbox日志,请到该链接浏览,谢谢支持。大项目中出现anr几乎是必然事件,这里我就不再去赘述怎么分析anr日志了。但是作为分析anr重要依据的必然离不开dropbox日志。问题来了,dropbox文件…

pgsql thinkphp5_thinkphp 连接postgresql

PHP连接:php.ini中将extensionphp_pgsql.dll前面的分号去掉,然后设置extension_dir指向php文件下的ext文件夹。正常情况下这样php就可以连接postgres了,但是我的仍然出错,提示“Fatal error: Call to undefined function pg_conne…

android蓝牙串口 hc06,Android手机通过蓝牙模块HC-06连接Arduino串口输出

通过手机进行通信是可以实现很多遥控功能,虽然距离是比较短,一般是10米,但对于我这种新手做测试,比起买一个几百块的多通道遥控器成本要低很多。实验目的:用Android实现蓝牙连接通过Arduino串口输出信息这次使用的是蓝…

esrgan_港中文-商汤联合实验室:ECCV2018 PIRM-SR 超分辨率比赛冠军:ESRGAN(已开源)...

Summary:中科院和京东AI研究院提出:改进SRN人脸检测算法,目前业界最强!Author:AmusiDate:2019-02-09微信公众号:CVer原文链接:香港中文大学-商汤联合实验室:ECCV2018 PIR…

联通物联卡为什么没有网络_联通物联卡的资费和优势怎样

近年来,物联网的发展如火如荼,许多物联网卡应用不断兴起,中国移动、中国电信、中国联通都加入了物联网这一事件,中国联通物联网卡和腾讯将联网网卡升级为TUSISIM网卡,这种新的联通TUSI物联网卡也可以理解为一种新的身份…

android中如何新建一个activity,《Android Activity》活动的介绍和创建

Activity 是什么Android 有四大组件:Activity、Service、Broadcast Receiver 和 Content Provider。Activity,活动,即用来承载用户界面的容器,Android 四大组件之一。我们在 APP 里面看到的页面就需要一个 Activity,页…

ffmpeg 音乐循环_[宜配屋]听图阁

ffmpeg -i out3.mp4 -i music3D.wav -filter_complex [1:a]alooploop-1:size2e09[out];[out][0:a]amix -ss 0 -t 60 -y out.mp4参数详细介绍:ffmpeg//输入视频,最好选一个大于一分钟的尝试-i out3.mp4//输入背景音,最好短一点,方便…

android qq红点,Android高仿QQ小红点功能

先给大家展示下效果图:绘制贝塞尔曲线:主要是当在一定范围内拖拽时算出固定圆和拖拽圆的外切直线以及对应的切点,就可以通过path.quadTo()来绘制二阶贝塞尔曲线了~整体思路:1、当小红点静止时,什么都不做,只…

modern android5.1,Modern摩登印

Modern摩登印可以帮助小伙伴们轻松制作手机相册,超多素材为你提供,支持个性化设置,将照片一秒变高大上的海报,还能支持音乐相册效果,超多原创音乐随你挑选,结合潮流相册模板,让你的作品更精美哦…

android1.6,令人遗憾的Android 1.6系统_戴尔 Mini5(Streak)_手机其它OS-中关村在线

令人遗憾的Android 1.6系统虽然Dell Streak上周五刚刚在美国地区上市,但实际上这款产品的开发时间已经很长了。早在去年Dell的Mini 3i上市之前这款被称之为Dell Mini 5的产品就已经出现在大家的视野之中,而当时其搭载的就是在当时看来还是十分先进的Andr…