所以,在搜索了 Google 和 SO 这个特定问题之后,我终于来了,这个问题在过去的三天里让我发疯了。有很多答案,但似乎都没有解决这个具体问题。这是我迄今为止发现的,
Android:当焦点位于 EditText 上时自动显示软键盘
EditText
打开一个带有 AccessibilityService
的屏幕(这部分已完成)。EditText
中输入文本。EditText
(通过单击按钮)获取输入文本,并将其发送到Messaging App的
EditText
,然后对Messaging App中的send按钮执行单击事件。这一切都将使用 AccessibilityService
完成,而不是由用户完成。notification_panel
或按导航区域中的 Back
、Home
或 Recents
按钮时,应移除覆盖的屏幕。我无法在
EditText
中使用 WindowManager
中的 AccessibilityService
来处理键盘及其输入。
-> 使用窗口类型
TYPE_APPLICATION_OVERLAY
和窗口标志 FLAG_NOT_FOCUSABLE
来扩展视图。
能够实现
AccessibilityService
中的所有事件。notification_panel
展开时,我可以删除覆盖的窗口。无法实现
EditText
或以编程方式显示键盘。到目前为止我所尝试过的
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
chattingLayoutParams = WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT
)
} else {
chattingLayoutParams = WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT
)
}
还有这个(但不起作用)
val imm: InputMethodManager =
getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(someEditText, InputMethodManager.SHOW_IMPLICIT)
-> 使用窗口类型
TYPE_APPLICATION_OVERLAY
和窗口标志 FLAG_NOT_TOUCH_MODEL
来扩展视图。
能够实现
无法实现
SccessibilityService
中的事件。
notification_panel
更改以删除覆盖的窗口。到目前为止我所尝试过的
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
chattingLayoutParams = WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT
)
} else {
chattingLayoutParams = WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT
)
}
AccessibilityService
Config.xml 文件
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackSpoken"
android:accessibilityFlags="flagReportViewIds"
android:canRetrieveWindowContent="true"
android:notificationTimeout="100" />
希望问题已解决,如有不便,敬请谅解。
这是因为当您覆盖屏幕时,输入管理器需要满足不透明度条件不超过InputManager.getMaximumObscuringOpacityForTouch(),当前为0.8f。
刚刚设置 chattingLayoutParams.alpha = 0.8f 修复它。
我遇到了同样的问题,我选择的标志是
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
但如果它是模式,你可能需要 FLAG_NOT_TOUCH_MODAL