首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将MotionEvent从Java发送到JNI

是指在Android开发中,将触摸事件(MotionEvent)从Java层发送到JNI(Java Native Interface)层进行处理。

MotionEvent是Android系统中用于表示触摸事件的类,包含了触摸点的坐标、动作类型、时间戳等信息。JNI是Java提供的一种机制,用于在Java和本地代码(如C/C++)之间进行交互。

在将MotionEvent发送到JNI之前,需要先创建一个JNI方法,用于接收MotionEvent并进行处理。具体步骤如下:

  1. 在Java层,创建一个JNI方法声明,用于将MotionEvent传递给JNI层。例如:
代码语言:txt
复制
public native void processMotionEvent(MotionEvent event);
  1. 在JNI层,实现该JNI方法。首先需要在JNI方法中获取MotionEvent的相关信息,然后进行相应的处理。例如:
代码语言:txt
复制
JNIEXPORT void JNICALL Java_com_example_MyClass_processMotionEvent(JNIEnv* env, jobject obj, jobject event) {
    // 获取MotionEvent类及其方法ID
    jclass motionEventClass = env->GetObjectClass(event);
    jmethodID getActionMethod = env->GetMethodID(motionEventClass, "getAction", "()I");
    jmethodID getXMethod = env->GetMethodID(motionEventClass, "getX", "()F");
    jmethodID getYMethod = env->GetMethodID(motionEventClass, "getY", "()F");

    // 获取MotionEvent的动作类型和坐标
    jint action = env->CallIntMethod(event, getActionMethod);
    jfloat x = env->CallFloatMethod(event, getXMethod);
    jfloat y = env->CallFloatMethod(event, getYMethod);

    // 进行相应的处理逻辑
    // ...

    // 释放局部引用
    env->DeleteLocalRef(motionEventClass);
}
  1. 在Java层,调用JNI方法并传递MotionEvent。例如:
代码语言:txt
复制
MotionEvent event = MotionEvent.obtain(...); // 创建MotionEvent对象,填充相关信息
processMotionEvent(event); // 调用JNI方法,将MotionEvent传递给JNI层进行处理
event.recycle(); // 回收MotionEvent对象

通过以上步骤,就可以将MotionEvent从Java发送到JNI,并在JNI层进行相应的处理。在实际应用中,可以根据具体需求对MotionEvent进行解析、处理触摸事件等操作。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云移动开发平台(https://cloud.tencent.com/product/umeng)
  • 腾讯云物联网平台(https://cloud.tencent.com/product/iotexplorer)
  • 腾讯云云原生应用引擎(https://cloud.tencent.com/product/tke)
  • 腾讯云音视频处理(https://cloud.tencent.com/product/mps)
  • 腾讯云数据库(https://cloud.tencent.com/product/cdb)
  • 腾讯云服务器运维(https://cloud.tencent.com/product/cvm)
  • 腾讯云网络安全(https://cloud.tencent.com/product/ddos)
  • 腾讯云存储(https://cloud.tencent.com/product/cos)
  • 腾讯云区块链(https://cloud.tencent.com/product/baas)
  • 腾讯云元宇宙(https://cloud.tencent.com/product/3dbuilder)
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

CSV的数据发送到kafka(java版)

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 为什么CSV的数据发到kafka flink做流式计算时...,选用kafka消息作为数据源是常用手段,因此在学习和开发flink过程中,也会将数据集文件中的记录发送到kafka,来模拟不间断数据; 整个流程如下: [在这里插入图片描述] 您可能会觉得这样做多此一举...); 另外,如果两条记录实际的间隔时间如果是1分钟,那么Java应用在发送消息时也可以间隔一分钟再发送,这个逻辑在flink社区的demo中有具体的实现,此demo也是数据集发送到kafka,再由flink...消费kafka,地址是:https://github.com/ververica/sql-training 如何CSV的数据发送到kafka 前面的图可以看出,读取CSV再发送消息到kafka的操作是...应用简介编码前,先把具体内容列出来,然后再挨个实现: CSV读取记录的工具类:UserBehaviorCsvFileReader 每条记录对应的Bean类:UserBehavior Java对象序列化成

3.4K30
  • Android SurfaceView onTouchEvent进阶操作OpenCV显示

    上面为onTouchEvent事件,把手指按下、移动、抬起时的操作都进行了处理,代码如下: @Override public boolean onTouchEvent(MotionEvent event...上图中调用OpenCV的方法nv21ToBitmap里我们重新计算了起始坐标和结束坐标的位置,然后新写了一个JNI的方法进行调用,代码如下: private Bitmap nv21ToBitmap(byte...ByteArrayOutputStream(); image.compressToJpeg(new Rect(0, 0, width, height), 80, stream); //rawImage...像在OpenCV中画圆,画矩形我们最简单的方法已经会,这里主要就是看看传进来的List我们怎么取出来,在JNI中传递LIst集合,我们在《Android NDK编程(八)--- JNI中List...Landroid/graphics/Bitmap$Config;"); jobject bitmap_config = env->CallObjectMethod(bmp, mid); //SRC

    1.6K20

    打通Java和C 之间的传送门,JNI0 到1的保姆级教程

    因此封装了lua 的战斗接口,lua 封装成可以java调用的动态链接库。这样的解决方案使用了JNI的技术。今天来聊下JNI的一些知识点。因为有一段时间没搞C++了,还是得从头开始。...JNIjava native interface的缩写,是用来java调用C++/C代码,也可以C++/C调用Java代码。...\jdk1.8.0_291\include\jni.h C:\Program Files\Java\jdk1.8.0_291\include\win32\jni_md.h ?...Void: 返回值类型 JNI函数名原型:Java_ + JNI方法所在的完整的类名,把类名里面的”.”替换成”_” + 真实的JNI方法名,这个方法名要和Java代码里面声明的JNI方法名一样。...JNIEnv 调用 Java 中的代码;操作 Java 对象 : Java 对象传入 JNI 层就是 Jobject 对象, 需要使用 JNIEnv 来操作这个 Java 对象; JNIEnv只在当前线程中有效

    1.9K50

    Android viewpager嵌套使用photoview异常问题(java.lang.IllegalArgumentException)

    自然就想到了使用viewpager+photoview来实现这一功能,但是在实现后,却发现一个bug,就是在使用双手放大图片时,会抛异常,抛的异常是如下: E/AndroidRuntime(22447): java.lang.IllegalArgumentException...: pointerIndex out of range E/AndroidRuntime(22447): at android.view.MotionEvent.nativeGetAxisValue...super.requestDisallowInterceptTouchEvent(disallowIntercept); } @Override public boolean dispatchTouchEvent(MotionEvent...除了这种方法,也对应的在网上找到了其他许多方法,有以下两种方法: 第一种方法是: 修改frameworks\base\core\jni\android_view_MotionEvent.cppandroid_view_MotionEvent_nativeGetAxisValue...库,重新编译整个系统一般需要半个多小时,这个方法就比较麻烦了 第二种是: 捕获IllegalArgumentException(非法参数异常)异常,即如: private float spacing(MotionEvent

    64610

    十分钟让你了解Android触摸事件原理(InputManagerService)

    手指接触屏幕到MotionEvent被传送到Activity或者View,中间究竟经历了什么?Android中触摸事件到底是怎么来的呢?源头是哪呢?...,对于触摸事件会首先通过findTouchedWindowTargetsLocked找到目标Window,进而通过dispatchEventLocked消息发送到目标窗口,下面看一下如何找到目标窗口,...从上面流程可以理解为什么说WindowManagerService跟InputManagerService是相辅相成的了,到这里,如何找到目标窗口已经解决了,下面就是如何事件发送到目标窗口的问题了。...如何事件发送到目标窗口 找到了目标窗口,同时也事件封装好了,剩下的就是通知目标窗口,可是有个最明显的问题就是,目前所有的逻辑都是在SystemServer进程,而要通知的窗口位于APP端的用户进程,...APP端的监听消息的手段是:socket添加到Looper线程的epoll数组中去,一有消息到来Looper线程就会被唤醒,并获取事件内容,代码上来看,通信信道的打开是伴随WindowInputEventReceiver

    1.3K20

    Android知识笔记:记录 2 个 “容易误解” 的Android 知识点

    event.getSequenceNumber(), seq); onInputEvent(event); } ViewRootImpl.WindowInputEventReceiver Native层通过JNI...如果你熟悉安卓的Window,Activity和Dialog对应的ViewRootImpl成员mView就是DecorView,View的dispatchPointerEvent()代码如下: //View.java...onTouchEvent(ev); } 如果你熟悉安卓的Window,Activity的getWindow()拿到的就是PhoneWindow,下面是PhoneWindow的代码: //PhoneWindow.java...return mDecor.superDispatchTouchEvent(event); } 下面是DecorView.superDispatchTouchEvent()代码: //DecorView.java...当程序员容易,当一个优秀的程序员是需要不断学习的,初级程序员到高级程序员,初级架构师到资深架构师,或者走向管理,技术经理到技术总监,每个阶段都需要掌握不同的能力。

    93320

    十分钟了解Android触摸事件原理(InputManagerService)

    手指接触屏幕到MotionEvent被传送到Activity或者View,中间究竟经历了什么?Android中触摸事件到底是怎么来的呢?源头是哪呢?...,对于触摸事件会首先通过findTouchedWindowTargetsLocked找到目标Window,进而通过dispatchEventLocked消息发送到目标窗口,下面看一下如何找到目标窗口,...更新窗口逻辑.png 从上面流程可以理解为什么说WindowManagerService跟InputManagerService是相辅相成的了,到这里,如何找到目标窗口已经解决了,下面就是如何事件发送到目标窗口的问题了...如何事件发送到目标窗口 找到了目标窗口,同时也事件封装好了,剩下的就是通知目标窗口,可是有个最明显的问题就是,目前所有的逻辑都是在SystemServer进程,而要通知的窗口位于APP端的用户进程,...InputChannl信道.jpg APP端的监听消息的手段是:socket添加到Looper线程的epoll数组中去,一有消息到来Looper线程就会被唤醒,并获取事件内容,代码上来看,通信信道的打开是伴随

    3.4K50

    Android输入系统的事件传递流程和IMS的诞生

    Android提供了getevent和sendevent两个工具帮助开发者设备节点读取输入事件和写入输入事件。 ?...View处理部分 View处理部分应该是大家最熟悉的了,一般情况下,输入事件最终会交由View来处理,应用开发者就可以通过一些回调方法轻松得到这个事件的封装类并对其进行处理,比如onTouchEvent(MotionEvent...SyetemServer的入口方法main方法开始讲起,如下所示。...注释1、2、3的方法可以看出,官方把系统服务分为了三种类型,分别是引导服务、核心服务和其他服务,其中其他服务是一些非紧要和一些不需要立即启动的服务。...注释2处调用了nativeInit方法,很明显是要通过JNI调用Navive方法。

    1.8K20

    【Android RTMP】RTMPDump 推流过程 ( 独立线程推流 | 创建推流器 | 初始化操作 | 设置推流地址 | 启用写出 | 连接 RTMP 服务器 | 发送 RTMP 数据包 )

    Java 传递字符串数据到 JNI : 启动推流时 , Java 层会将 RTMP 推流地址传递给 JNI ; 2 . jstring 类型转为 char* 类型 : Java 字符串转为 C 字符串...释放局部引用 : JNI 中的局部引用变量 , 使用完毕后及时释放 ; // 释放 Java 层获取的字符串 // 释放局部引用 env->ReleaseStringUTFChars(path, pushPathFromJava...RTMP 数据包发送到服务器中 ; // 7.... RTMP 数据包发送到服务器中 ret = RTMP_SendPacket(rtmp, packet, 1); 十、 断开 RTMP 连接并释放资源 ---- 推流结束后 , 关闭与 RTMP 服务器连接... RTMP 数据包发送到服务器中 ret = RTMP_SendPacket(rtmp, packet, 1); // RTMP 数据包使用完毕后,

    2.4K20

    Android跨进程通信IPC之3——关于JNI的那些事

    C语言中调用Java的方法:可以让我们在C代码中找到Java代码class的方法,并且调用该方法 Java语言中调用C语言方法:同时也可以在Java代码中,一个C语言的方法映射到Java的某个方法上...本地方法JNI接口指针当参数来接受。虚拟机在从相同的Java线程对本地方法进行多次调用时,保证传递给本地方法的接口指针是相同的。..., REG_JNI(register_android_view_KeyEvent), REG_JNI(register_android_view_MotionEvent), REG_JNI...// 我们所需的路径ClassLoader中拉出,并将其传递给nativeLoad,便可以 // 调用私有动态链接器API。...七、总结 本文主要是通过实例,基于Android 6.0源码分析 JNI原理,讲述JNI核心功能: 介绍了JNI的概念及如何查找JNI方法,让大家明白如何Java层跳转到Native层 分了JNI

    2.6K50

    事件是如何到达activity的?

    因此整一棵view树,外部可以看做一个view。viewRootImpl接收到触摸信息之后,经过处理之后,封装成MotionEvent对象发送给他所管理的view,由view自己进行分发。...DecorView重写了该方法,逻辑比较简单,仅仅做了一个判断: DecorView.java api29 public boolean dispatchTouchEvent(MotionEvent ev...接下来看看PhoneWindow如何处理: PhoneWindow.java api29 public boolean superDispatchTouchEvent(MotionEvent event...看到DecorView的方法: DecorView.java api29 public boolean superDispatchTouchEvent(MotionEvent event) {...IMS系统底层接收到事件之后,会WMS中获取window信息,并将事件信息发送给对应的viewRootImpl viewRootImpl接收到事件信息,封装成motionEvent对象后,发送给管理的

    66010

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券