Android 亚洲开发银行无障碍重点变化

Android 亚洲开发银行无障碍重点变化,android,accessibility,talkback,Android,Accessibility,Talkback,我想知道如何使亚洲开发银行在对讲时调整可访问性焦点。我试过: adb shell input trackball roll 0 1 adb shell input [stylusdpad|keyboard|mouse|touchpad|gamepad|touchnavigation|joystick|touchscreen|stylus|trackball] swipe 180 780 540 780 adb shell input keyboard keyevent KEYCODE_TAB a

我想知道如何使亚洲开发银行在对讲时调整可访问性焦点。我试过:

adb shell input trackball roll 0 1
adb shell input [stylusdpad|keyboard|mouse|touchpad|gamepad|touchnavigation|joystick|touchscreen|stylus|trackball] swipe 180 780 540 780
adb shell input keyboard keyevent KEYCODE_TAB
adb shell input keyevent KEYCODE_NAVIGATE_NEXT
adb shell "input keyevent KEYCODE_ALT_LEFT & input keyevent KEYCODE_DPAD_LEFT"
我还尝试过使用adb shell getevent记录事件,并将其回放,但没有成功

但我总是要用身体滑动屏幕(即ADB滑动不起作用),以改变可访问性焦点。有没有一种方法可以通过无障碍性来做到这一点,仅仅是下一个和上一个动作

我发现:

导航

  • 移动到下一项:Alt+右箭头 注意:在连续阅读模式下,此快捷方式在文本中快速前进
  • 移动到上一项:Alt+左箭头 注意:在连续阅读模式下,此快捷方式可倒带文本
这意味着我只需要一次发送多个按键,对吗?我试过这个


(尽管我知道
设备0
实际上是键盘设备,但我想尝试所有这些设备)

我的答案将尽可能简洁。我的完整代码可以在上找到

据我所知,开发人员无法通过ADB执行可访问性操作,他们必须创建一个,以便创建一个,以便通过ADB获取输入。这是答案的三分之二,因为开发人员无法通过ADB激活可访问性服务,所以还需要一个组件!每次切换可访问性时,都必须手动执行此操作,或者只有一个可访问性编辑我也算出了这一点:)

无障碍服务 开发人员文档提供了一种机制,用于:

可访问性服务是一种提供用户界面增强功能的应用程序,用于帮助残疾用户或暂时无法与设备完全交互的用户。例如,开车、照顾小孩或参加非常吵闹的聚会的用户可能需要额外或替代的界面反馈

我按照这个方法构建了一个可以由用户执行操作的服务。以下是该服务的一个片段,用于向左和向右滑动(用户导航):

广播接收机。 需要注意的是,启用服务时会注册接收者:

    override fun onServiceConnected() {
        IntentFilter().apply {
            addAction(ACCESSIBILITY_CONTROL_BROADCAST_ACTION)

            priority = 100

            registerReceiver(accessibilityActionReceiver, this)           
        }
   // REMEMBER TO DEREGISTER!
然后,接收方可以响应意图并调用服务:

    override fun onReceive(context: Context?, intent: Intent?) {
        require(intent != null) { "Intent is required" }
        val serviceReference = //get a reference to the service somehow

        intent.getStringExtra(ACCESSIBILITY_ACTION)?.let {
            serviceReference.apply {
                when (it) {
                    ACTION_NEXT -> swipeHorizontal(true)
                    ACTION_PREV -> swipeHorizontal(false)
                    //...
adb上的示例用法:

adb shell am broadcast -a com.balsdon.talkback.accessibility -e ACTION "ACTION_PREV"
编辑

通过adb启动服务: 多亏了

可访问性快捷方式 **编辑:不再需要,但我还是会把它留在这里**

可能最烦人的是,每次切换可访问性时,服务都会关闭。因此,我在按下音量增大和音量减小键的情况下添加了

我已经有了一个脚本,所以我只是把它放在上面,每次我都让我的服务运行

编辑2

我提出了一个问题,即开发人员需要编写“滑动服务”,而不是“导航服务”。这是有问题的,因为手势可以被修改,然后我的系统将无法按预期运行。相反,我应该能够调用我想要执行的特定操作
导航到下一个元素
导航到上一个元素
,而不是“向右滑动”和“向左滑动”-阅读WCAG指南后,我不认为这违反了原则

    override fun onReceive(context: Context?, intent: Intent?) {
        require(intent != null) { "Intent is required" }
        val serviceReference = //get a reference to the service somehow

        intent.getStringExtra(ACCESSIBILITY_ACTION)?.let {
            serviceReference.apply {
                when (it) {
                    ACTION_NEXT -> swipeHorizontal(true)
                    ACTION_PREV -> swipeHorizontal(false)
                    //...
adb shell am broadcast -a com.balsdon.talkback.accessibility -e ACTION "ACTION_PREV"
TALKBACK="com.google.android.marvin.talkback/com.google.android.marvin.talkback.TalkBackService"
ALLYDEV="com.balsdon.accessibilityBroadcastService/.AccessibilityBroadcastService"
adb shell settings put secure enabled_accessibility_services $TALKBACK:$ALLYDEV
  INPUT_DEVICE="/dev/input/event1" # VOLUME KEYS EVENT FILE
  VOLUME_DOWN=114 #0x0072
  VOLUME_UP=115   #0x0073
  BLANK_EVENT="sendevent $INPUT_DEVICE 0 0 0"

  INST_DN="sendevent $INPUT_DEVICE 1 $VOLUME_DOWN 1 && $BLANK_EVENT && sendevent $INPUT_DEVICE 1 $VOLUME_UP 1 && $BLANK_EVENT"
  INST_UP="sendevent $INPUT_DEVICE 1 $VOLUME_DOWN 0 && $BLANK_EVENT && sendevent $INPUT_DEVICE 1 $VOLUME_UP 0 && $BLANK_EVENT"
  adb shell "$INST_DN"
  sleep 3
  adb shell "$INST_UP"