关系经济人类预测化学自然
中准网
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产

基于AccessibilityService的Android

6月18日 孤小单投稿
  使用无障碍服务
  无障碍服务即AccessibilityService,是一种,可提供界面增强功能,来协助残障用户或可能暂时无法与设备进行全面互动的用户完成操作的应用。
  Google是这样描述的:无障碍服务是一种应用,可提供界面增强功能,来协助残障用户或可能暂时无法与设备进行全面互动的用户完成操作。
  从Android1。6(API级别4)开始,您就可以构建和部署无障碍服务,并且这些服务在Android4。0(API级别14)中得到了显著改进。Android支持库也随着Android4。0的发布得到更新,为这些增强的无障碍功能(自Android1。6起)提供支持。如果开发者的目标是打造广泛兼容的无障碍服务,建议他们使用该支持库,并让开发的应用支持Android4。0中引入的更高级的无障碍功能。classScannerService:AccessibilityService(){overridefunonAccessibilityEvent(p0:AccessibilityEvent){}overridefunonInterrupt(){}overridefunonKeyEvent(event:KeyEvent):Boolean{LogUtils。d(event)if(Scanner。dispatchKeyEvent(event)){returntrue}returnsuper。onKeyEvent(event)}}
  AndroidManifest。xml文件中注册ScannerServiceserviceandroid:name。ScannerServiceandroid:enabledtrueandroid:exportedtrueandroid:permissionandroid。permission。BINDACCESSIBILITYSERVICEintentfilterintentfiltermetadataandroid:nameandroid。accessibilityserviceandroid:resourcexmlkeyserviceconfigservice
  keyserviceconfig。xml这个文件用来声明无障碍服务,最终最后系统设置页面的【无障碍】设置页面中看到相关的开关。?xmlversion1。0encodingutf8?
  KeyEvent处理
  这里我通过Scanner工具类来处理捕获的KeyEvent,并且在识别到KeyEvent。ACTIONDOWN按键之后将识别内容抛给注册进来的回调函数。最终由回调函数得到了识别到的扫描内容。
  另外这里KeyEvent到扫描内容的转换,使用了TextKeyListener。避免了,手动的字符转换,也尽量避免一些兼容性的问题(例如回车换行的识别等)
  参考实现如下(主要代码):objectScanner:IScanner{扫描结果回调privatevalcallbacksStackIScanCallback()privatevarisStartfalse整体扫描结果privatevarmScanResultList:ArrayListStringArrayList()privatevarhandler:Handler?nullprivatevaltkl:KeyListenerTextKeyListener。getInstance(false,TextKeyListener。Capitalize。NONE)privatevaletEditable。Factory。getInstance()。newEditable()privatevalkeyView。OnKeyListener{v,keyCode,eventvarreturnResultfalseif(event。actionKeyEvent。ACTIONDOWN){valcallbackcallbacks。peek()if(mScanResultList。size0callback!null!isStart){isStarttrueet。clear()callback。scanStart()}returnResulttkl。onKeyDown(null,et,keyCode,event)}elseif(event。actionKeyEvent。ACTIONUP){LogUtils。d(ScanneronKeyUpkeyCode{keyCode}UnicodeChar{event。unicodeChar})valisEnterevent。keyCodeKeyEvent。KEYCODEENTERif(isEnter){LogUtils。d(Scannernewapi:et)valmScanResultet。toString()et。clear()mScanResultList。add(mScanResult)handler?。let{it。removeCallbacks(resultRunnable)it。postDelayed(resultRunnable,300)}}else{handler?。let{it。removeCallbacks(resultRunnable)}}returnResulttkl。onKeyUp(null,et,keyCode,event)}else{returnResulttkl。onKeyOther(null,et,event)NOTE:MydevicesneverusedKeyEvent。ACTIONMULTIPLEsoIdontknowifitshouldgetfiredhereorwiththekeydownevent。}returnResult}overridefuninitScanner(mContext:Context){LogUtils。d(initScanner)if(handlernull){handlerHandler()}}overridefundispatchKeyEvent(event:KeyEvent):Boolean{returnkey。onKey(null,event。keyCode,event)}overridefunregisterScanCallback(callback:IScanCallback){callbacks。add(callback)}overridefununregisterScanCallback(callback:IScanCallback){callbacks。remove(callback)}overridefundestroyScanner(){handler?。let{it。removeCallbacks(resultRunnable)}mScanResultList?。clear()callbacks。clear()}privatevalresultRunnableRunnable{valcallbackcallbacks。peek()if(callback!null){valresult:ListStringArrayList(mScanResultList)LogUtils。d(Scanresult{GsonUtils。toJson(result)})if(result。isNotEmpty()){callback。scanSuccess(result〔0〕)}callback。scanSuccess(result)mScanResultList。clear()isStartfalse}}}扫码回调处理
  通过监听页面的生命周期,自动的将实现过IScanCallback的页面注册到Scanner工具类中,并且在页面销毁的时候自助注销监听,从而实现了监听扫描结果的自动管理。
  参考实现如下(主要代码):classAppLifecycleHandler:Application。ActivityLifecycleCallbacks,ComponentCallbacks2{overridefunonActivityCreated(activity:Activity,savedInstanceState:Bundle?){valisAccessibilitySettingsOnisAccessibilitySettingsOn(activity。applicationContext)LogUtils。d(AppLifecycleHandlerisAccessibilitySettingsOnisAccessibilitySettingsOn)if(!isAccessibilitySettingsOn){Toast。makeText(activity。applicationContext,请在系统【设置】中【无障碍】页面开启的demo【识别扫码输入】开关,Toast。LENGTHLONG)。show()openAccessibilitySetting(activity。applicationContext)}if(activityisIScanCallback){LogUtils。d(AppLifecycleHandleronActivityCreated扫描监听注册activity)registerScanCallback((activityasIScanCallback))}}overridefunonActivityDestroyed(activity:Activity){if(activityisIScanCallback){LogUtils。d(AppLifecycleHandleronActivityDestroyed注销扫描监听注册activity)unregisterScanCallback((activityasIScanCallback))}}}总结
  通过android。accessibilityservice。AccessibilityService的onKeyEvent捕获扫码输入,将KeyEvent传递给Scanner处理,Scanner将KeyEvent传递给android。text。method。TextKeyListener,捕获回车按键(或者其他自定义按键的时候)将识别结果抛到回调中,由扫码回调处理扫码结果。
投诉 评论 转载

下基层个人工作总结第1篇第2篇第3篇第4篇第5篇更多顶部第一篇:下基层个人工作总结第二篇:下基层个人工作总结第三篇:领导下基层个人工作总结第四篇:千名干部下基层个人工作总结第五篇:十百千万……基于AccessibilityService的Android使用无障碍服务无障碍服务即AccessibilityService,是一种,可提供界面增强功能,来协助残障用户或可能暂时无法与设备进行全面互动的用户完成操作的应用。……骑动感单车之后大腿酸痛怎么办在骑动感单车过程中,如果姿势不正确,如身体左右摆动,或上下跳跃幅度过大,会导致腰椎和膝盖受到的冲击力增加,容易引起急性或慢性运动损伤,那使用动感单车该注意什么呢?正确的单车设置……胎盘低是什么原因造成的怀孕胎盘低是什么原因造成的?孕妇如果是属于高龄一族(35岁以上)的话,再加上合并有子宫畸形、肌瘤、疤痕,多产、以往有过前置胎盘史发生胎盘前置的机会就会增多。那么,胎盘低置的危害……图谋造句用图谋造句大全(121)萝卜头对五妹起歹心,欲图谋不轨,被五妹狠狠踹了一脚后,他怕家里遭到萝卜头的暗算报复,因而让大女儿招弟与萝卜头联姻,想以此来化解矛盾,以求平安。(122)从今年3……演员朱亚文放弃8年初恋单爱沈佳妮,行走的荷尔蒙只对老婆释放文赵睚眦最近几天,影视剧《简言的夏冬》热播,当朱亚文饰演的夏冬一出场时,不少网友惊呼脱了衣服是硬汉,穿上西装是绅士。除了身材以为,他和万茜一起出演的办公室直球恋情也……国产奶粉品牌有哪些近年来,随着代购出现的问题越来越多,购买渠道越来越不靠谱。另一方面,国家队奶粉的监管也越来也严。购买国产奶粉似乎也是一个不错的选择。那么国产奶粉品牌有哪些呢?下面本站就来讲讲相……光到底是什么?对撞机中这一发现,科学家直呼颠覆认知在我们的常规印象中,光子是一种循规蹈矩的粒子,它在传递过程中始终是心无旁骛,直线传播的。也正因为此,470亿光年远的光才能来到地球,并被人类看见。然而,光真是自然界中最忠……睡觉鬼压床,心阳不足,张仲景古方,补心阳,调理梦魇本文理论依据:《临床仲景方剂学》大家好,我是三甲医院副院长范军铭你睡觉有没有遇到鬼上身鬼压床的事儿。医案分享:36岁,女,姓孙。每天晚上睡着的时候就突然……那缕草药香拥有两千多年历史的杭州,老的东西很多。一提到杭州的老,年代悠久的中医院胡庆余堂,必定是其中之一。胡庆余堂是红顶商人胡雪岩创办的。据说,是因胡母患病却买了霉变的药,胡雪岩一……近朱者未必赤近墨者未必黑有个很著名的故事:古时候孟子的母亲为了让孟子有个好的学习环境,曾多次搬家,择邻而居。在老舍的笔下,我们也会看到一个善良朴实的青年祥子因旧社会的腐败而变成了一个自私贪婪的人,这些……藏獒吃主人现实版农夫与蛇引人深思农夫与蛇的故事,我们从小就听,它告诉我们人太善良不一定会得到回报,通俗来说就是养宠物一定要有忧患意识。有一个现实版的农夫与蛇,更让人心痛!一家人养了只藏獒,结果发生了藏獒吃主人……
全球无人战车需求猛增!雅思合体,石宇奇缺席2022全英赛国羽参赛名单布克4年2。24亿美元提前续约,同期前五顺位现状如何?两人水昙花一现,这6位仅红一时的演员让人唏嘘,当年热度今日全无情侣入住酒店,千万别傻乎乎的插上房卡当归羊肉汤新能源整车打的不可开交,上游则闷声发大财赏花时节莫错过(6)孩子上课坐不住,总是想说话,这是专注力不足的表现,父母要重视全名单公布!佛山表彰制造业高质量发展百佳企业午间要闻11月LPR报价维持不变买房门槛降至历史低点,超百城V观财报3000亿白马股重挫7,受出口数据影响?迈瑞医疗回应
有身造句用有身造句大全简易方程教学反思一次意义非凡的活动(虚拟货币)挖矿犯不犯法?王者荣耀荣耀战力值怎么算王者荣耀荣耀战力值如何算致年轻的朋友们三口人的家常饭菜,营养搭配有荤有素,口味清淡吃得舒服又健康好文:养小龙虾投食方法热闻聚热点网 八年级时间作文公司形式主义官僚主义自查自纠个人心得生猛造句用生猛造句大全真初中作文600字

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找菏泽德阳山西湖州宝鸡上海茂名内江三亚信阳长春北海西安安徽黄石烟台沧州湛江肇庆鹤壁六安韶关成都钦州