在启用 Android TalkBack 服务的情况下使用 SeekBar 和 OnSeekBarChangeListener

Using SeekBar and OnSeekBarChangeListener with Android TalkBack service enabled

我需要识别用户已使用 OnSeekBarChangeListener 界面中的 onStopTrackingTouch 回调方法结束搜索栏进度更改。

每当在正常触摸模式下触发搜索栏进度更改操作时,这都可以正常工作,但是当启用 TalkBack 服务时,我不再能够检测到此事件(未触发回调)。这是意料之中的(因为启用无障碍服务的进度变化不涉及任何屏幕触摸操作),如文档所述:

/**
 * Notification that the user has finished a touch gesture. Clients may want to use this
 * to re-enable advancing the seekbar.
 * @param seekBar The SeekBar in which the touch gesture began
 */
void onStopTrackingTouch(SeekBar seekBar);

在这种情况下,恐怕我需要提取我在该方法中的逻辑以位于其他位置并从 onProgressChanged 方法中有条件地调用它(取决于启用的 TalkBack 服务),例如

if (accessibilityManager.isEnabled && accessibilityManager.isTouchExplorationEnabled) {
    fireTheAction()
}

我不乐意每次都使用这个 if 语句。 有没有办法强制TalkBack服务调用这个方法?

不幸的是,没有记录其他选项,因此遵循的方法是手动检查用户是否调用了该操作以及是否启用了无障碍服务。

public void onProgressChanged(SeekBar b, int progress, boolean fromUser) {
    if (!fromUser) return;
    // some logic

    if (accessibilityManager.isEnabled && accessibilityManager.isTouchExplorationEnabled) {
        fireTheAction();
    }
}

https://support.google.com/accessibility/android/answer/6006598?hl=en 要在 TalkBack 中使用滑块,您可以 double-tap 并按住,然后向右或向左拖动。 它适用于jetpack compose的滑块,我认为它也适用于SeekBar。