如何禁用无障碍服务的覆盖气泡点击?

问题描述 投票:0回答:1

我正在为我的项目实现自动点击功能。我希望辅助服务在开始运行时将无法与覆盖气泡交互。然而,结果是它仍然可以与覆盖气泡中的按钮交互。

这是我的代码

创建气泡服务

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

我怎样才能实现这一目标?

android kotlin accessibilityservice
1个回答
0
投票

您需要将覆盖气泡的窗口类型更改为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
)
© www.soinside.com 2019 - 2024. All rights reserved.