第一步:设置无障碍代理
adSkipView.setAccessibilityDelegate(object : AccessibilityDelegate() {
override fun performAccessibilityAction(host: View?, action: Int, args: Bundle?): Boolean {
//忽略AccessibilityService传过来的点击事件以达到防止模拟点击的目的
return if (action == AccessibilityNodeInfo.ACTION_CLICK
|| action == AccessibilityNodeInfo.ACTION_LONG_CLICK) {
true
} else super.performAccessibilityAction(host, action, args)
}
})
第二步:拒绝 => 无障碍的位置模拟点击
val accessibilityManager: AccessibilityManager = getSystemService(Context.ACCESSIBILITY_SERVICE) as AccessibilityManager
adSkipView.setOnTouchListener({ v, event ->
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (null != accessibilityManager && accessibilityManager.isEnabled()) {
//可以直接拦截无障碍的【坐标】点击,不影响用户正常的手动点击
adSkipView.setClickable(false)
}
}
false
})
这样你的开屏广告就不会被那些,用无障碍的模拟点击,跳过你的开屏广告了。