我正在为我的项目实现自动点击功能。我希望辅助服务在开始运行时将无法与覆盖气泡交互。然而,结果是它仍然可以与覆盖气泡中的按钮交互。
这是我的代码
创建气泡服务
override fun onCreate() {
super.onCreate()
val pm = getSystemService(Context.POWER_SERVICE) as PowerManager
mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "layout_bubble:service")
mBubbleView = LayoutInflater.from(this).inflate(R.layout.layout_bubble, null)
mBubbleParams = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH or
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS or
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
PixelFormat.TRANSLUCENT
)
} else {
WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT
)
}
mBubbleParams?.gravity = Gravity.CENTER_VERTICAL or Gravity.START
mWindowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
mWindowManager?.addView(mBubbleView, mBubbleParams)
}
自动点击服务
override fun onServiceConnected() {
super.onServiceConnected()
autoClickService = this
startService(Intent(this, AutoClickService::class.java)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK))
}
fun click(x: Float, y: Float) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) return
val path = Path()
path.moveTo(x, y)
val builder = GestureDescription.Builder()
val gestureDescription = builder
.addStroke(GestureDescription.StrokeDescription(path, 0L, 10L))
.build()
this.dispatchGesture(gestureDescription, null, null)
}
启动自动点击
if (autoClickService != null) {
autoClickService?.click(x,y)
Thread.sleep(40L)
}
我怎样才能实现这一目标?
您需要将覆盖气泡的窗口类型更改为TYPE_SYSTEM_OVERLAY
val params = WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT
)