讲义参考说明_第1页
讲义参考说明_第2页
讲义参考说明_第3页
讲义参考说明_第4页
讲义参考说明_第5页
免费预览已结束,剩余38页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AndroidSensorJNI 课程名称AndroidSensorJNI实现课程类别:客户培训课程课程目JNI的介绍和作SensorHAL层简Android如 SensorHAL对象:客讲师:应用软件工程

数教学法:面2主要内

AndroidAndroidSensorHAL3JNI

JavaNativeInterface(JNI)是Java提供的一个很重要的特性。它使得用诸如C/C++等语言编写的代码可以与运行于Java虚拟机(JVM)中的Java代码集成。 4JNI

5JNI

6JNI

。2JNI支持一个“调用接口”(invocationinterface),它允许你把一个JVM嵌入到本地程序中。本地程序可以一个实现了JVM的本地库,然后使用“调用7JNI

8JNI

什么场合下应该使用当用JAVA程序连接本地数据库时,使用JDBC提供的APIJAVA程序可以使用分布式对象技术,如JAVAIDLAPI 9JNI

主要内

AndroidAndroidSensorHALAndroid中使用

Android中使用

Android中使用

的Java工程,并添加一个com.example. /*Anativemethodthatisimplementedby o-jni'nativelibrary,whichiswiththis nativeString Android中使用

#include<string.h>#include<jni.h> oJni_stringFromJNI(JNIEnv*jobjectthiz)return(*env)->NewStringUTF(env, ofromJNI} Android中使用

名规则:Java代码中的 需要添加native关键字;Native的对应函数名要以“Java_”开头,后“_”分割,在package名中的“.”也要改为“_”。此外,关于函数的参数和返回值也有相应的规则。对于Java中的基本类型如int、double、char等,在Native端都有相对应的类型来表示,如jint、jdouble、jchar等;其他的对象类型则统统由jobject来表示(String是个例外,由于其使用广泛,故在Native代码中有jstring这个类型来表示,正如在上例中返回值String对应到Native代码中的返回值jstring)。而对于Java中的数组,在Native中由jarray对应,具体到基本类型和一般对象类型的数组则有jintArray等和jobjectArray分别对应(String数组在这里没有例外,同样用jobjectArray表示)。还有一点需要注意的是,在JNI的Native函数中,其前两个参数JNIEnv*和jobject是必需的——前者是一个JNIEnv结构体的指针,这个结构体中定义了很多JNI的接JNI函数的Java对象,有点类似于C++中的this指针。在上述两个参数之后,还 数没有参数,则Native的对应函数只有类型为JNIEnv*和jobject的两个参数。Android中使用

当然,要使用JNI函数,还需要先加载Native代码编译出来的动态库文件(static o-} 际上是Linux系统——上例中,实际加载的库文件应为“lib Android中使用

TextViewtv=newTextView(this);tv.setText(stringFromJNI());Android中使用

的系统功能则是通过在其上的ApplicationFramework以JavaAPI ApplicationFramework提供的API o的类,代码如下:packagecom.example. publicclassSay o{publicStringsay oFromJava(StringnativeMsg){Stringstr=nativeMsg+"ButshowninJava!";returnstr;}}Android中使用

o类中 一般来说,要在Native代码 ,并提供了FindClass接口,根据类的完整的包路径即可得到其jclass2根据jclassjobjectJava中,创建一个新对象只jobject中的成员变量或方法 对象的方法是先得到方法的Method,然后使用Call<Type>Method接口调用,这里Type对应相应方法的返回值 成员变量的步骤一样:首先GetFieldID得到成员变量的ID,然后Get/Set<Type>Field读/写变量值。Android中使用

oFromJava(JNIEnv*env){jstringstr=NULL;jclassclz=(*env)->FindClass(env, jmethodIDctor=(*env)->GetMethodID(env,clz,jobjectobj=(*env)->NewObject(env,clz,ctor);jmethodIDmid=(*env)->GetMethodID(env,clz, if(mid){jstringjmsg=(*env)->NewStringUTF(env,"I'min}

str=(*env)->CallObjectMethod(env,obj,mid,return}Android中使用

GetMethodID的第三个参数是方法名(对于构造函数一律用“<init>”表 构造相应的“签名”,请参考JNI的相关文档。建的对象实例被称为“LocalReference”,它仅在创建它的Native代码作用域“GlobalReference”——需要注意的是,当GlobalReference不再使用后,需 主要内

AndroidAndroidSensorHALAndroidSensorHAL层简

AndroidSensorHAL层简

#define1#define234567 AndroidSensorHAL层接

structsensors_module_t{structhw_module_tcommon;int(*get_sensors_list)(structsensors_module_t*module,structsensor_tconst**list);AndroidSensorHAL层简

struct{constconstAndroidSensorHAL层简

structsensors_poll_device_tstructhw_device_tint(*activate)(structsensors_poll_device_t*dev,inthandle,intenabled);int(*setDelay)(structsensors_poll_device_t*dev,inthandle,int64_tns);int(*poll)(structsensors_poll_device_tsensors_event_t*data,intAndroidSensorHAL层简SensorHAL

主要内

AndroidAndroidSensorHALAndroidAndroidSensorFrameworkAndroidSensorFramework

AndroidSensorHAL AndroidSensorFramework

AndroidSensorFramework

AndroidSensorFramework

AndroidSensorFramework

4SensorDevice负 AndroidSensorFramework

AndroidSensorFramework

AndroidSensorFramework

端与服务端之间的通信只有接接口,只有一个管道传数据。那么数据的形AndroidSensorFramework

typedefstructsensors_event_tunion

relative_humidity; }AndroidSensorFramework

typedefstructASensorEvent{int32_tversion;int32_tsensor;int32_ttype; int64_ttimestamp;union{

} AndroidSensorFramework

在JNI层,只会将结构体数据中一部分的信息传到JAVAsensors_data_poll(JNIEnv*env,jclassclazz,jintnativeQueue,jfloatArrayvalues,jintArraystatus,jlongArraytimestamp){sp<SensorEventQueue>if(queue==0)return-1;status_tr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论