案例
安全键盘,无法读取键盘窗口中的内容。
防御方案
button.accessibilityDelegate = object : View.AccessibilityDelegate() {
override fun performAccessibilityAction(
host: View?,
action: Int,
args: Bundle?
): Boolean {
// 【1】拦截 View 响应无障碍服务模拟事件的 API : performAction 方法触发的行为
return true
}
override fun sendAccessibilityEvent(host: View?, eventType: Int) {
// 【2】 篡改或屏蔽 View 发送的无障碍事件
// super.sendAccessibilityEvent(host, eventType)
}
override fun onInitializeAccessibilityNodeInfo(
host: View?,
info: AccessibilityNodeInfo?
) {
// 【3】 阻止 View 生成 AccessibilityNodeInfo , 从而防止无障碍抓取到内容
// super.onInitializeAccessibilityNodeInfo(host, info)
}
override fun onInitializeAccessibilityEvent(host: View?, event: AccessibilityEvent?) {
// 【4】 可以在这阻止 View 发送出去的 AccessibilityEvent
// super.onInitializeAccessibilityEvent(host, event)
}
// 【5】阻止 AccessibilityEvent 向子 View 传递
override fun dispatchPopulateAccessibilityEvent(
host: View?,
event: AccessibilityEvent?
): Boolean {
//
return false
}
// 【6】阻止子 View 请求发送无障碍事件消息
override fun onRequestSendAccessibilityEvent(
host: ViewGroup?,
child: View?,
event: AccessibilityEvent?
): Boolean {
return false
}
}