Android Camera - JNI的简单使用

1.JNI的含义

JNI即为java native interface Java本地接口;JNI是用来调用本地方法的技术,用来使Java和C/C++进行通信。
简单来说,Java运行一个程序需要和不同的系统进行交互,在windows里就要和windows底层平台交互,mac里就要和mac的底层平台交互, JVM就是通过大量的JNI技术能够使Java运行在不同的系统平台当中,与不同的系统平台底层进行交互。

2.camera中新增JNI方法实例

案例背景:在实现GMS核心服务的时候,有涉及到需要在Camera中新增一个JNI方法提供给java层调用,便于在GMS测试途中来禁用扫码头

通常涉及以下几个步骤

  1. 声明Java的native方法:在Java类中声明native方法。
       路径:frameworks/base/core/java/android/hardware/Camera.java
     
    tips:新增的方法需要更新api 路径:system/frameworks/base/core/api/current.txt
    建议使用命令去更新api,手动更新容易导致编译不过
  2. 实现Native方法:使用C或C++实现该方法。
      路径:frameworks/av/camera/include/camera/CameraBase.h
               frameworks/av/camera/CameraBase.cpp
        
  3. 注册Native方法:使用JNI注册该方法,使得Java可以调用它。

            路径:frameworks/base/core/jni/android_hardware_Camera.cpp
           

通过以上三个步骤之后,重新编译代码更新so库,在out的项目目录
system/lib64/libcamera_client.so,
刷机后就可以通过Java代码调用Camera.setDisableScan(true)方法了

3.Java与JNI类型对照表
基本类型对照:

引用类型对照:

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android使用JNI调用OpenCV库来实现摄像头功能是可行的。以下是调用摄像头的简单步骤: 首先,你需要在Android项目中集成OpenCV库。可以通过将OpenCV库添加到Gradle依赖项或手动导入库文件来完成。 其次,创建一个JNI接口,将Java代码与C/C++代码进行绑定。JNI接口允许在Java和C/C++之间进行双向通信。 然后,在C/C++代码中编写与摄像头相关的功能。可以使用OpenCV提供的函数和类来处理视频流。例如,你可以使用VideoCapture类打开摄像头并获取图像帧。 接下来,在JNI接口中实现调用摄像头的功能。通过JNI接口,将Java代码的请求传递给C/C++函数来执行摄像头操作。你可以设置一个循环,不断从摄像头读取图像帧并进行处理。 最后,在Java代码中调用JNI接口中的方法来启动摄像头。可以使用SurfaceView来显示摄像头捕获的图像。你可以使用Camera类来控制摄像头的预览以及其他设置。 需要注意的是,在JNI和C/C++代码中处理摄像头操作时,要遵循正确的线程管理和图像处理技术,以确保流畅的手机摄像头应用程序。 总之,通过JNI调用OpenCV库,可以很方便地在Android上实现摄像头功能。项目中要同时涉及Java和C/C++代码,需要进行正确的接口绑定和线程管理。这样,你可以轻松地使用OpenCV函数和类来处理摄像头操作并实现自己的摄像头应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值