的收音机程序,该运用通过调用串口API与外围收音机芯片通信,进而制约收音机芯片完成搜台、显示等功能。AndroidNDK开发一般有以下步骤:1)JNI接口设计;2)使用C/C++实现本地策略;3)生成动态链接库;4)将动态链接库复制到Java工程,生成.apk文件。首先,创建一个NDK工程,然后在这个文件夹下建立jni和src两个目录,jni用来存放我们的C文件,src是调用C库的Java接口文件。接着创建jni/SerialPort.c,该文件的主要作用是完成串口的打开和关闭。JNIEXPORTjobjectJNICALLJava_android_serialport_SerialPort_open(JNIEnv*env,jobjectthiz,jstringpath,jintbaudrate){……/*Openingdevice*/constchar*path_utf=(*env)-GetStringUTFChars(env,path,&;iscopy);LOGD("Openingserialport%s",path_utf);fd=open(path_utf,O_RDWR|O_DIRECT|O_SYNC);LOGD("open()fd=%d",fd);(*env)-ReleaseStringUTFChars(env,path,path_utf);……/*Configuredevice*/……structtermioscfg;cfmakeraw(&;cfg);cfsetispeed(&;cfg,speed);cfsetospeed(&;cfg,speed);}在文件中,函数名这样定义:jobjectJNICALLJava_android_serialport_SerialPort_open,这个是
免费论文写作指导jhlyzz
免费毕业论文请上zidir
JNI的标准,定义需要按照如下格式:Java_packagename_classname_methodname接着创建文件jni/Android.mk.这个文件是我们本地c代码的Makefile。文件内容本文来源:华融
经济学论文网ihrdLOCAL_PATH:=$(callmy-dir)include$(CLEAR_VARS)LOCAL_MODULE:=serial_portLOCAL_SRC_FILES:=SerialPort.cLOCAL_LDLIBS:=-lloginclude$(BUILD_SHARED_LIBRARY)LOCAL_PATH:=$(callmy-dir)这句用来指定编译的路径通过调用宏my-dir获取到当前
工作的路径。include$(CLEAR_VARS)CLEAR_VARS这个变量是编译系统提供的用来指明一个GNUmakefile文件添加这句主要的目的是清理所有的LOCAL_XXX,比如LOCAL_MODULE、LOCAL_SRC_FILES等。在每个新模块的开始处需要添加这句。LOCAL_MODULE:=serial_port这句定义了模块名称,将来编译的库或者可执行程序就以此命名。如果编译的是动态库或者静态库,那么库名就是libserial_port.so或者libserial_port.a。需要注意的是系统会在生成动态库或者静态库的时候自动添加lib的前缀。LOCAL_SRC_FILES:=SerialPort.c是列出需要编译的源码文件名。这里不需要列出头文件和被包含文件,因为编译系统会自动为你添加。include$(BUILD_SHARED_LIBRARY)这句说明将来产生的库是共享库即动态链接库。接着,我们就可以在cygwin下编译生成库文件了。如图2所示,进入到工程目录下,运行ndk-build命令,生成了名为libserial_port.so的文件。将该文件安装到工程目录下的libs“armeabi目录中。然后在src目录下编写的serialport.java文件,该文件用于JNI接口调用。关键代码publicclassSerialPort{……/*opentheserialport*/mFd=open(device.getAbsolutePath(),baudrate);//JNIprivatenativestaticFileDescriptoropen(Stringpath,intbaudrate);publicnativevoidclose();static{System.loadLibrary("serial_port");}}privatenativestaticFileDescriptoropen(Stringpath,intbaudrate)这句申明,带有native关键字,说明该策略是本地策略。System.loadLibrary("serial_port")这句就是用来加载我们的c动态库的。上面声明策略的具体实现就在我们加载的库中。在完成了上述工作后,我们就可以针对具体运用来使用串口完成数据通信
免费论文写作指导jhlyzz
免费毕业论文请上zidir
了。文中通过按键搜台,并显示出具体频段。界面布局采用
xml文件来声明,主要包括两个Button和一个TextView视图。在Button上添加了按键响应,当按下Button时通过串口发送调频信号。bforeward.setOnClickListener(newView.OnClickListener(){publicvoidonClick(Viewv){try{mOutputStream.write(‘+‘);mOutputStream.write(‘“n‘);}catch(IOExceptione){e.