如何解决talkBack模式下finish掉activity时会将页面内容读取两边解决办法
时间: 2023-12-14 16:40:22 浏览: 30
这个问题是由于 TalkBack 模式下,系统默认会读取页面的内容,而当页面被 finish 掉时,TalkBack 模式并没有及时感知到这一变化,导致页面被读取了两遍。解决方法如下:
1. 在 Activity 的 onDestroy() 方法中调用 AccessibilityManager 的 interrupt() 方法来中断 TalkBack 的读取,示例代码如下:
```
@Override
protected void onDestroy() {
super.onDestroy();
AccessibilityManager accessibilityManager = (AccessibilityManager) getSystemService(Context.ACCESSIBILITY_SERVICE);
if (accessibilityManager.isEnabled()) {
accessibilityManager.interrupt();
}
}
```
2. 在 finish() 方法中加入 AccessibilityEvent 的 TYPE_WINDOW_STATE_CHANGED 类型事件,示例代码如下:
```
@Override
public void finish() {
super.finish();
AccessibilityEvent event = AccessibilityEvent.obtain(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
event.setClassName(getClass().getName());
event.setPackageName(getPackageName());
AccessibilityManager accessibilityManager = (AccessibilityManager) getSystemService(Context.ACCESSIBILITY_SERVICE);
if (accessibilityManager.isEnabled()) {
accessibilityManager.sendAccessibilityEvent(event);
}
}
```
这样做的目的是在页面被 finish 掉后,手动发送一个窗口状态改变的事件,从而让 TalkBack 模式及时感知到页面的变化,从而避免了页面被读取两遍的问题。