要使用系统级 Java API 监听手机触摸,需要使用 Android 框架中的 MotionEvent 类。以下是一个示例代码,可以在 app_process 中执行:

import android.view.MotionEvent;
import android.view.ViewConfiguration;

public class TouchListener implements Runnable {

    private static final int TOUCH_MOVE_THRESHOLD = ViewConfiguration.getTouchSlop();

    private int mLastX;
    private int mLastY;

    public void run() {
        while (true) {
            MotionEvent event = getNextEvent();
            if (event.getAction() == MotionEvent.ACTION_MOVE) {
                int x = (int) event.getX();
                int y = (int) event.getY();
                int dx = x - mLastX;
                int dy = y - mLastY;
                if (Math.abs(dx) > TOUCH_MOVE_THRESHOLD || Math.abs(dy) > TOUCH_MOVE_THRESHOLD) {
                    onMove(x, y);
                    mLastX = x;
                    mLastY = y;
                }
            } else if (event.getAction() == MotionEvent.ACTION_UP) {
                onUp();
                break;
            }
        }
    }

    private MotionEvent getNextEvent() {
        // TODO: Implement this method to get the next touch event.
        return null;
    }

    private void onMove(int x, int y) {
        // TODO: Implement this method to handle touch move events.
    }

    private void onUp() {
        // TODO: Implement this method to handle touch up events.
    }
}

在上面的代码中,我们首先定义了一个 TouchListener 类,它实现了 Runnable 接口。然后在 run() 方法中,我们使用 getNextEvent() 方法获取下一个触摸事件,如果是 ACTION_MOVE 事件,就判断是否超过了 TOUCH_MOVE_THRESHOLD 阈值,如果是,就调用 onMove() 方法处理移动事件,并更新 mLastX 和 mLastY 变量。如果是 ACTION_UP 事件,就调用 onUp() 方法处理触摸结束事件,并跳出循环。

在使用这个 TouchListener 类之前,我们需要实现 getNextEvent() 方法来获取下一个触摸事件。这个方法可以使用 Android 框架中的 InputEventReceiver 类来实现。以下是一个简单的实现示例:

import android.os.Looper;
import android.os.SystemClock;
import android.view.InputDevice;
import android.view.InputEvent;
import android.view.InputEventReceiver;
import android.view.MotionEvent;

public class TouchEventReceiver extends InputEventReceiver {

    private final Looper mLooper;
    private final TouchListener mTouchListener;

    public TouchEventReceiver(Looper looper, TouchListener touchListener) {
        super(looper);
        mLooper = looper;
        mTouchListener = touchListener;
    }

    @Override
    public void onInputEvent(InputEvent event) {
        if (event instanceof MotionEvent) {
            mTouchListener.onTouchEvent((MotionEvent) event);
        }
        super.onInputEvent(event);
    }

    public void sendTouchEvent(int action, int x, int y) {
        long downTime = SystemClock.uptimeMillis();
        long eventTime = SystemClock.uptimeMillis();
        MotionEvent event = MotionEvent.obtain(
                downTime, eventTime, action, x, y, 0);
        event.setSource(InputDevice.SOURCE_TOUCHSCREEN);
        dispatchEvent(event);
    }

    public void quit() {
        mLooper.quit();
    }
}

在上面的代码中,我们定义了一个 TouchEventReceiver 类,它继承自 InputEventReceiver 类。在构造函数中,我们传入了一个 Looper 对象和一个 TouchListener 对象。在 onInputEvent() 方法中,我们判断事件是否是 MotionEvent,并调用 TouchListener 的 onTouchEvent() 方法处理事件。在 sendTouchEvent() 方法中,我们创建一个新的 MotionEvent 对象,并调用 dispatchEvent() 方法将事件分发给 InputEventReceiver。在 quit() 方法中,我们退出 Looper 循环。

最后,我们可以在 app_process 中创建 TouchListener 和 TouchEventReceiver 对象,并调用 TouchListener 的 run() 方法来监听触摸事件。以下是一个示例代码:

import android.os.Handler;
import android.os.Looper;

public class Main {

    public static void main(String[] args) {
        Looper.prepareMainLooper();
        TouchListener touchListener = new TouchListener();
        TouchEventReceiver touchEventReceiver = new TouchEventReceiver(
                Looper.myLooper(), touchListener);
        touchListener.setTouchEventReceiver(touchEventReceiver);
        new Handler().post(touchListener);
        Looper.loop();
        touchEventReceiver.quit();
    }
}

在上面的代码中,我们首先调用 Looper.prepareMainLooper() 方法来创建主线程的 Looper 对象。然后创建 TouchListener 和 TouchEventReceiver 对象,并将它们互相绑定。最后调用 Handler 的 post() 方法来启动 TouchListener 的 run() 方法,并调用 Looper.loop() 方法进入主线程的消息循环。在循环结束后,我们调用 TouchEventReceiver 的 quit() 方法退出 Looper 循环

安卓10源码环境 如何调用系统级 java api 来监听手机触摸 app_process来执行 请给出代码

原文地址: http://www.cveoy.top/t/topic/ckM0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录