Android 检测覆盖中的触摸事件并进一步传递它们
我想制作一个Android 检测覆盖中的触摸事件并进一步传递它们,android,service,kotlin,overlay,Android,Service,Kotlin,Overlay,我想制作一个叠加手势检测器,它将显示在所有其他应用程序之上。 覆盖将从服务启动 我制作了一个示例服务,只是为了检查是否可以通过某种方式记录覆盖图标的触摸事件,并将其发送到当前活动的应用程序: class GestureDetectorService : Service() { override fun onBind(intent: Intent?): IBinder? = null val windowManager: WindowManager get() = getSystemSe
叠加
手势检测器,它将显示在所有其他应用程序之上。
覆盖将从服务启动
我制作了一个示例服务,只是为了检查是否可以通过某种方式记录覆盖图标的触摸事件,并将其发送到当前活动的应用程序:
class GestureDetectorService : Service() {
override fun onBind(intent: Intent?): IBinder? = null
val windowManager: WindowManager
get() = getSystemService(Context.WINDOW_SERVICE) as WindowManager
var iv: AppCompatImageView? = null
override fun onCreate() {
super.onCreate()
iv = AppCompatImageView(this)
iv?.setImageResource(R.drawable.icon)
iv?.setOnTouchListener { view, motionEvent ->
when (motionEvent.action) {
MotionEvent.ACTION_DOWN -> {
Log.d("Click", "From icon")
false
}
else -> false
}
}
val params: WindowManager.LayoutParams = WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT
, WindowManager.LayoutParams.WRAP_CONTENT
, WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
or WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
or WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
or WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR
or WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED
, PixelFormat.TRANSLUCENT)
params.gravity = Gravity.TOP or Gravity.LEFT
params.x = 100
params.y = 100
windowManager.addView(iv, params)
}
override fun onDestroy() {
super.onDestroy()
iv.let { windowManager.removeView(iv) }
}
}
不走运
比如说,我想检测用户何时以一定的速度进行投掷,或在屏幕上“绘制”特定形状,这将触发记事本的启动
但我不希望这一切阻碍正常的应用程序交互,用户必须能够与正常启动的任何应用程序交互
用Kotlin给出简洁的答案会非常好,但如果你能用Java提出一些东西,那也将非常好。幸运的是,这是不可能的,除非是在根设备上或通过自定义固件
您所描述的是窃听攻击:监视用户输入,同时传递相同的输入,以使其具有正常效果。自Android 4.0以来,出于隐私和安全原因,这一功能一直被阻止。幸运的是,这是不可能的,除非是在根设备上或通过自定义固件
您所描述的是窃听攻击:监视用户输入,同时传递相同的输入,以使其具有正常效果。自安卓4.0以来,出于隐私和安全原因,此功能已被阻止。感谢您的快速回复。我在想,也许这不是什么稀奇的事情,我们有各种各样的应用程序在其他应用程序之上,比如RedMoon或Messenger springy contact heads。所以我知道你可以在屏幕上画一些东西,但不接受触摸,或者画一些东西并接受触摸,但它们不会被进一步传播?有什么解决办法吗?或者这肯定会永远被阻止?@laszlo:“所以我知道你可以在屏幕上画一些东西,但不接受触摸,或者画一些东西并接受触摸,但它们不会被进一步传播?”——正确。“有什么解决办法吗”--我当然希望没有,因为那会代表一个安全漏洞。谢谢你的快速回答。我在想,也许这不是什么稀奇的事情,我们有各种各样的应用程序在其他应用程序之上,比如RedMoon或Messenger springy contact heads。所以我知道你可以在屏幕上画一些东西,但不接受触摸,或者画一些东西并接受触摸,但它们不会被进一步传播?有什么解决办法吗?或者这肯定会永远被阻止?@laszlo:“所以我知道你可以在屏幕上画一些东西,但不接受触摸,或者画一些东西并接受触摸,但它们不会被进一步传播?”——正确。“有什么解决办法吗”--我当然希望没有,因为那将代表一个安全缺陷。