持续创作,加速生长!这是我参加「日新计划 6 月更文挑战」的第6天,点击查看活动概况
Android 无障碍的大局悬浮窗能够在屏幕上增加 UI 供用户进行快捷操作,能够展现在一切运用程序之上长期展现。另一方面,在一些自动化场景下,能够用来屏蔽用户行为,避免用户手动操作打断自动化流程。
无障碍增加 UI
无障碍服务增加 UI 十分简单,运用 LayoutInflater 在 Ajavaeeccessib初始化失败是怎么解决ilityService 的 onServiceConnected
增加一个 UI:
// in AccessibilityService, service 代表 AccessibilityService 的子类实例
private fun initView() {
// 在屏幕顶部增加一个 View
val wm = service.getSystemService(AccessibilityService.WINDOW_SERVICE) as? WindowManager
val lp = WindowManager.LayoutParams().apply {
type = TYPE_ACCESSIBILITY_OVERLAY // 因为此权限才能展现处理
layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
format = PixelFormat.TRANSLUCENT
flags = flags or
FLAG_LAYOUT_NO_LIMITS or
FLAG_NOT_TOUCHABLE or // 透传接触事情
FLAG_NOT_FOCUSABLE or // 透传输入事情
FLAG_LAYOUT_IN_SCREEN
width = MATCH_PARENT
height = MATCH_PARENT
}
// 经过 LayoutInflater 创立 View
val rootView = LayoutInflater.from(service).inflate(R.layout.float_layer, null)
wm?.addView(rootView, lp)
}
然后在自界approach说的无障初始化电脑时出现问题碍服务中去调用这个方法:
class MyAccessibilityService: AccessibilityService() {
override fun onServiceConnected() {
super.onServiceConnected()
initView()
}
// ...
}
需求留意的是,这里不能将 initandroid手机View
增加到 onCreate
生命周期中,官方文档也有一些放在 onCreate 中的操作,但实际上都会导致 crash 。
java.lang.RuntimeException: Unable to create service com.chunyu.accessibilitydemo.service.AccessibilityDemoService: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
无障碍服务一切的初始化作业,都要放在 onServiceConn初始化游戏启动器失败ected
中androidstudio安装教程执行。这样就能够将自界说的 UI 展现到屏幕上了。
关于无障碍服务android下载安装的装备,能够参考官方 API 。
装备分析
从运用上来看,无障碍蒙层是经过 WindowManageappstorer 增加appstore到屏幕上的。而关键的一些信息在 WindowManager.LayoutParams 装备的数据中。
Type
Window 有一个关键的特点 type ,它被界说在 WindowManager 的内部类 LayoutParamappstores 中,它能够操控 Window 的显现次第初始化游戏启动器失败。主要分为三种:
- Application Window:运用程序窗口 1-99 ,运用程序窗口一般坐落初始化失败是怎么解决最底层。
- System Window:体系窗口 2000-2999 ,体系级窗口一般坐落最顶层,不会被其他的window遮javaee住。
- Sub Window:子窗口 1000-1999appearance,子窗口一般是显现在运用窗口之上。
从三种窗口的值也可推断出,type 的值越大,Window 就越靠近用户。
在上面java语言的运用中,咱们将 type 设置为 TYPE_ACCESSIBILITY_OVERLAY
,它的值是 2032 ,是一个体系窗口,所以能够展现在运用程序之上android的drawable类。 TYPE_ACCESSIBILITY_OVERLAY
,是无障碍服务用来展现 UI 专用的 窗口类型 。运用它能够在一切的运用程序上展现蒙层。
Flag
flag 中包android/harmonyos含了两个关键的值 FLAG_NOT_TOUCHABLE
和 FLAG_NOT_FOCUSA初始化游戏启动器失败BLE
,和一些其他的 flag 。装备这两个内容,蒙层将不会影响任何用户操作。
-
FLAG_NOT_TOUCHABLE
:能够将 Window 设appearance置为永不接纳接触事情,从而能够将接触事按钮图片情透传给蒙层遮盖住的区域,不阻塞用户操作。 -
FLAG_NOT_FOCUSABLE
:能够将 Window 设置为永不获取按键输入焦点,用户无法向这个 Window 发送按键或其他的按钮时刻,而被它掩盖的内容能够接纳并呼应事情。 -
FLAG_LAYOUT初始化游戏启动器失败_NO_LIMITS
:答应窗口延伸到屏幕之外。 -
FLAG_android/harmonyosLAYOUT_IN_SCREEN
:将窗口放置在整个屏幕中,疏忽来自父窗口的任何约束。
Layandroid是什么手机牌子outInDisplayCutoutMode
这个特点能够用来操控 Window 在刘海屏的布局方式。
-
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
:仅当刘海屏彻底包含在体系栏中时,才答应窗口扩展到刘海区域。 否则,窗口的布局使其不与刘海区域堆叠。 -
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
:答应 Window 延伸到短的一侧边际的刘海区域。 -
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
:Window 不答应延伸android什么意思到刘海屏区域。 -
LAYOUT_IN_DISPandroid是什么手机牌子LAY_CUTOUT_MODE_ALandroidstudio安装教程WAYS
:答应 Window 延初始化英文伸到一按钮开关符号切的屏幕边际刘海区域。