Служба доступности dispatchGesture не работает, как задумано, она лишь изредка выполняет жест? - PullRequest
0 голосов
/ 26 апреля 2020

Я пытаюсь создать альтернативный вариант для одной руки с курсором для достижения верхних уровней устройства android с помощью курсора. Я отслеживаю движения с помощью трекера в нижней части экрана с помощью сенсорного прослушивателя, распознаю нажатия пользователя и пытаюсь выполнить эти нажатия в том месте, где находится указатель. И иногда это работает, а иногда нет. И я не могу понять, почему?

Я включил android: canPerformGestures = "true" в метаданные службы.

Это код, который я использовал для выполнения жестов клика

        // duration must be set in ms according to long click or simple click
        long duration;
        if (isLongClick){
            duration = 400L;
        }else{
            duration = 103L;
        }

        GestureDescription.Builder builder = new GestureDescription.Builder();

        Point point = new Point(cursorParams.x,cursorParams.y);

        Path path = new Path();
        path.moveTo( point.x, point.y);
        path.lineTo( point.x + 50, point.y + 50);

        GestureDescription.StrokeDescription clickStroke =
                new GestureDescription.StrokeDescription(path,10, duration);

        builder.addStroke(clickStroke);
        GestureDescription description = builder.build();
        boolean isDispatched = dispatchGesture(description, new GestureResultCallback() {
            @Override
            public void onCompleted(GestureDescription gestureDescription) {
                super.onCompleted(gestureDescription);
                Log.d("GestureClick","Gesture completed successfully");
            }

            @Override
            public void onCancelled(GestureDescription gestureDescription) {
                super.onCancelled(gestureDescription);
                Log.d("GestureClick","Gesture failed");
            }
        },null);

Я пытался изменить время и продолжительность начала, а также изменить путь с помощью оператора lineTo и без него. Но все заканчивается тем же результатом. И я также попытался вернуть оба true или false в сенсорном слушателе, где я захватил жесты, в случае, если они прерывают жесты диспетчеризации.

Во всех этих попытках результат один и тот же, иногда жест работает, нажимая на предполагаемое место на экране и большую часть времени это не так. И он всегда перехватывает метод onCompleted на GestureResultCallback.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...