是什么触发了 Android 上对 AccessibilityInteractionController.performAccessibilityActionUiThread 的调用?
What triggers a call to AccessibilityInteractionController.performAccessibilityActionUiThread on Android?
当用户与应用了 LengthFilter
InputFilter
的 EditText
交互时,Samsung Galaxy S 7 Edge 出现崩溃。用户将如何调用方法 AccessibilityInteractionController.performAccessibilityActionUiThread
?
我查看了 AccessibilityInteractionController
的来源,但找不到有关用户如何触发该方法的良好文档。
我的崩溃堆栈跟踪与这些问题中发布的内容类似:
- Android exception - Unknown origin (possibly widget)
- My Android App has IndexOutOfBoundsException,how to solved?
查看 Android 的 issue tracker,这个问题似乎是由于密码管理器使用辅助功能事件生成密码造成的。但是,生成的密码不符合 maxLength
属性,导致崩溃。
建议的解决方案似乎有效:创建一个子类,然后改用它。 (复制代码供参考)
public class SafePinEntryEditText extends EditText {
public SafePinEntryEditText(Context context) {
super(context);
}
public SafePinEntryEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SafePinEntryEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(21)
public SafePinEntryEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public void setSelection(int index) {
// prevent index out of bounds caused by AccessibilityService events
if (index > length()) {
index = length();
}
super.setSelection(index);
}
@Override
public void setSelection(int start, int stop) {
// prevent index out of bounds caused by AccessibilityService events
if (start > length()) {
start = length();
}
if (stop > length()) {
stop = length();
}
super.setSelection(start, stop);
}
}
当用户与应用了 LengthFilter
InputFilter
的 EditText
交互时,Samsung Galaxy S 7 Edge 出现崩溃。用户将如何调用方法 AccessibilityInteractionController.performAccessibilityActionUiThread
?
我查看了 AccessibilityInteractionController
的来源,但找不到有关用户如何触发该方法的良好文档。
我的崩溃堆栈跟踪与这些问题中发布的内容类似:
- Android exception - Unknown origin (possibly widget)
- My Android App has IndexOutOfBoundsException,how to solved?
查看 Android 的 issue tracker,这个问题似乎是由于密码管理器使用辅助功能事件生成密码造成的。但是,生成的密码不符合 maxLength
属性,导致崩溃。
建议的解决方案似乎有效:创建一个子类,然后改用它。 (复制代码供参考)
public class SafePinEntryEditText extends EditText {
public SafePinEntryEditText(Context context) {
super(context);
}
public SafePinEntryEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SafePinEntryEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(21)
public SafePinEntryEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public void setSelection(int index) {
// prevent index out of bounds caused by AccessibilityService events
if (index > length()) {
index = length();
}
super.setSelection(index);
}
@Override
public void setSelection(int start, int stop) {
// prevent index out of bounds caused by AccessibilityService events
if (start > length()) {
start = length();
}
if (stop > length()) {
stop = length();
}
super.setSelection(start, stop);
}
}