Nano Hash - криптовалюты, майнинг, программирование

запускать событие ontouch программно

то, что я пытаюсь сделать, это вызвать событие онтач в определенной области моей активности, когда я получаю определенную строку от arduino (через bluetooth). Я пытаюсь создать контроллер с Wii и Arduino для использования в игре, которую я пишу сам.

прежде чем вы ответите на этот вопрос, я уже знаю, что существует функция * openButton.performClick(); для этого, но в игре я не всегда буду использовать кнопки, так что это нехорошо.

я хочу имитировать прикосновение, как это делает adb с обезьяной, но без разрешения root что-то вроде инъекции прикосновения, просто без рута.

это часть кода:

    int[] loc = new int[2]; 
    openButton.getLocationOnScreen(loc);// get the region where to simulate the //touch event
    xTest = (float)loc[0]; 
    yTest = (float)loc[1]; 



@SuppressLint("Recycle") void testing(){
    long downTime = SystemClock.uptimeMillis();
    long eventTime = SystemClock.uptimeMillis() + 100;
    float x = xTest;
    float y = yTest;


    int metaState = 0;
    MotionEvent motionEvent = MotionEvent.obtain(
        downTime, 
        eventTime, 
        MotionEvent.ACTION_UP, 
        x, 
        y, 
        metaState
    );
    dispatchTouchEvent(motionEvent);


}

@Override
public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
     int action = event.getAction();
        switch (action & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_UP:
                // do something
                openButton.performClick();
                break;
            case MotionEvent.ACTION_MOVE:
                // do something
                // how to trigger a ACTION_DOWN event here?
                break;
    }

    return false;
}

Итак, когда я получаю определенную строку, я хочу программно смоделировать событие касания в определенной области экрана, на этот раз это кнопка, но это может быть что-то еще, поэтому «view.performclick()» не очень хорошо. Я видел несколько примеров, когда перед dispatchTouchEvent они помещают представление, если я это сделаю, я получаю сообщение об ошибке, заранее спасибо за вашу помощь.


Ответы:


1

Если вы используете onTouchListener, метод onTouch(...) является общедоступным, поэтому я думаю, вы можете его вызвать.

Поэтому, когда вы создаете экземпляр onTouchListener, сохраняйте его как переменную.

OnTouchListener listener = new OnTouchListener() { [[override code etc.]]  }

Затем просто вызовите метод onTouch, который вы переопределили, и задайте ему представление и событие, которое вы хотите имитировать.

У MotionEvent нет подрядчика, но есть фабричный метод, называемый get():

MotionEvent myEvent = MotionEvent.obtain(long downTime, long eventTime, int action, float x, float y, int metaState);

Затем просто передайте его на свой onTouch:

onTouch(myView, myEvent);

Предполагая, что вы передали правильные значения своему событию, оно не заметит разницы.

Чтобы узнать больше о MotionEvent и значениях параметров, перейдите по ссылке:

http://developer.android.com/reference/android/view/MotionEvent.html

Спасибо!

07.05.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..