无障碍防御措施

673 阅读1分钟

案例

安全键盘,无法读取键盘窗口中的内容。

防御方案

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
    }
}