您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 本文我们首先介绍在移动设备上进行java开发的基本原理
本文我们首先介绍在移动设备上进行java开发的基本原理,然后描述如何为蓝牙通讯编写java应用。Java蓝牙APIJava蓝牙API依赖java通用连接框架,一直一来这成为java蓝牙API应用的一个局限。但是,人们建议将GCF加入到J2SE中。Java蓝牙API使得访问更多的系统成为可能。Java蓝牙API定义了两个包:一个是Java蓝牙API的核心javax.bluetooth,另一个是用于对象交换协议的javax.obex(OBEX)。根据JSR82规范,所有潜在蓝牙系统都必须支持蓝牙控制中心(BCC),该控制中心是一个控制面板,它的作用类似于可以让用户或OEM给堆栈中的某些配置参数定义具体值得应用程序,特别是,它将应用于堆栈初始化中。任何蓝牙应用都有以下这些组件:堆栈初始化组件,设备管理组件,设备发现组件,服务发现组件和通讯组件。堆栈初始化在开始无线通讯之前,你需要以销售商预订的方式初始化蓝牙设备。(具体的堆栈初始化步骤超出了蓝牙API规范的范围。)设备管理JSR82规范介绍了用于设备管理的两个类:LocalDevice和RemoteDevice。LocalDevice允许你请求获得蓝牙设备的静态信息。它依靠javax.bluetooth.DeviceClass类来获得设备类型和它所提供的服务类型。RemoteDevice可用来获得蓝牙邻近区的设备信息(例如,某个远程蓝牙设备的地址)。它可以代表一台远程设备(例如,一台在可到达范围内的设备),并提供相应的方法来获得关于这台设备的有关信息,包括它的蓝牙地址和名称。每个蓝牙设备有一个唯一的硬件地址,像计算机的MAC地址一样。你可以设定设备发现的级别,通过调用LocalDevice对象中的setDiscoverable()方法可以使得其它蓝牙设备发现当前设备。(见列表B)设备发现无线设备需要一种机制来允许它们发现其它的设备并访问它们的功能。核心蓝牙API的DiscoveryAgent类和DiscoveryListener接口提供了需要的发现服务。有三种方式获得可访问设备列表。DiscoveryAgent.startInquiry()方法可将设备设置为查询模式,为了充分利用这种模式,应用必须要指定一个事件监听器来对与查询相关的事件作出反应。当查询完成或取消时,会调用DiscoveryListener.inquiryCompleted()方法。如果一台设备不想等待发现其它的设备,可以使用DiscoveryAgent.retrieveDevices()方法来获得一个已经存在的列表。该方法或者返回一个在前面的查询中发现的设备列表,或者返回一个预知的设备列表,这些设备是由本地设备提前告诉蓝牙控制中心的它经常联系的设备。返回那种列表取决于传递的参数。列表C演示了最简单的一种方式,当检测到一台新的蓝牙设备时,对象需要使用DiscoveryAgent通过DiscoveryListener接口通知你。服务发现服务发现允许你发现附近的服务,而不管哪一台设备提供的该服务。DiscoveryAgent提供的方法可以用来发现蓝牙服务设备上的服务,并初始化服务发现事务。在服务可以被发现以前,必须首先在蓝牙服务设备上注册或广播该服务。服务设备负责完成很多任务,包括创建描述所提供的服务的服务记录,接受来自客户端的连接,向服务设备的服务发现数据库(SDDB)添加新的服务记录。总之,它的工作类似于web服务器。列表D是服务注册的一个例子。通讯两台设备必须共享通用的通讯协议才能通讯。为了应用能够访问更多的蓝牙服务,蓝牙javaAPI提供了这样一个机制,它允许连接到使用RFCOMM,L2CAP,或OBEX协议的任何服务。如果服务使用了位于上面协议之上其它的协议(例如TCP/IP),只有在应用中利用CLDC通用连接框架实现额外的协议,才可以访问该服务。用于服务记录的URL包括数字和符号,大体是这样的结构:btspp://508031205080110F1B1B1D1C100:8。它的意思是客户应该使用蓝牙串口框架来建立到地址为508031205080110F1B1B1D1C100的设备的8号服务。设备地址和计算机的物理地址相似,列表E显示了简单的RFCOMM连接本文给出了一个最简单的蓝牙应用的J2ME程式,用以帮助研发者快速的掌控JSR82。该程式分别在2台蓝牙设备上安装后,一台设备作为服务端先运行,一台设备作为客户端后运行。在服务端上我们发布了一个服务,该服务的功能是把客户端发过来的字符串转变为大写字符串。客户端起动并搜索到服务端的服务后,我们就能从客户端的输入框里输入任意的字符串,发送到服务端去,同时观察服务端的反馈结果。实例代码包括3个java文件。一个是MIDlet,另外2个为服务端GUI和客户端GUI。该程式已在wtk22模拟器和Nokia6600,Nokia6670两款手机上测试通过。由于有很多的集成开发环境,如Jbuilder,NetBeans,这里我们主要针对MyEclipse(Eclipse就一样的了)。用MyEclipse开发MDIP程序我们需要一个插件EclipseMe来开发J2ME程序。插件的下载可以到:上下载。a,在Myeclipse的菜单栏上选择'Help'|'SoftwareUpdates'|'FindandInstall',查找我们下载的EclipseMe的插件。b,选择'Searchfornewfeaturestoinstall'选中EclipseMe插件,单击'next'继续。然后就按照本地软件更新的方式进行安装EclipseMe。好了点击'Finish'完成。c,重启MyEclipse,在菜单栏中选择'Window'|'Preference',会发现对话框中多了J2ME一个分支,那么你成功安装了EclipseMe。这样就可以进行J2ME编程了吗?不能,你还没有关联WTK,当然无法找到J2ME的相关配置和简表。d,我们已经安装好了WTK,那么如何关联上MyEclipse呢?e,在刚才展开的'Preference'单击'J2ME'再单击'Preferences'配置管理。打开配置对话框。f,选择'DeviceManagement(设备管理),对话框中选择'Import(导入)'g,'Refresh'刷新EclipseMe会查找已知的设备定义,我们将自己的STK或SDK安装目录添加进去。h,这样我们可以成功的看到导入的设备出现在EclipseMe中。选择默认的手机模式单击'OK'完成。至此,我们的MyEclipse的集成开发环境的配置也完成了。StupidBTMIDlet.javaimportjavax.microedition.lcdui.Alert;importjavax.microedition.lcdui.AlertType;importjavax.microedition.lcdui.Command;importjavax.microedition.lcdui.CommandListener;importjavax.microedition.lcdui.Display;importjavax.microedition.lcdui.Displayable;importjavax.microedition.lcdui.List;importjavax.microedition.midlet.MIDlet;importjavax.microedition.midlet.MIDletStateChangeException;/***@authorJagie**MIDlet*/publicclassStupidBTMIDletextendsMIDletimplementsCommandListener{Listlist;ServerBoxsb;ClientBoxcb;/**(non-Javadoc)**@seejavax.microedition.midlet.MIDlet#startApp()*/protectedvoidstartApp()throwsMIDletStateChangeException{list=newList(蓝牙入门,List.IMPLICIT);list.append(Client,null);list.append(Server,null);list.setCommandListener(this);Display.getDisplay(this).setCurrent(list);}/***debug方法*@params要显示的字串*/publicvoidshowString(Strings){Displayabledp=Display.getDisplay(this).getCurrent();Alertal=newAlert(null,s,null,AlertType.INFO);al.setTimeout(2000);Display.getDisplay(this).setCurrent(al,dp);}/***显示主菜单**/publicvoidshowMainMenu(){Display.getDisplay(this).setCurrent(list);}protectedvoidpauseApp(){//TODOAuto-generatedmethodstub}publicvoidcommandAction(Commandcom,Displayabledisp){if(com==List.SELECT_COMMAND){Listlist=(List)disp;intindex=list.getSelectedIndex();if(index==1){if(sb==null){sb=newServerBox(this);}sb.setString(null);Display.getDisplay(this).setCurrent(sb);}else{//每次都生成新的客户端实例cb=null;System.gc();cb=newClientBox(this);Display.getDisplay(this).setCurrent(cb);}}}protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{//TODOAuto-generatedmethodstub}}ClientBox.javaimportjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.IOException;importjava.util.Vector;importjavax.microedition.io.Connector;importjavax.microedition.io.StreamConnection;importjavax.microedition.lcdui.Command;importjavax.microedition.lcdui.CommandListener;importjavax.microedition.lcdui.Displayable;importjavax.microedition.lcdui.Form;importjavax.microedition.lcdui.Gauge;importjavax.microedition.lcdui.StringItem;importjavax.microedition.lcdui.TextField;//jsr082APIimportjavax.bluetooth.BluetoothStateException;importjavax.bluetooth.DeviceClass;importjavax.bluetooth.DiscoveryAgent;importjavax.
本文标题:本文我们首先介绍在移动设备上进行java开发的基本原理
链接地址:https://www.777doc.com/doc-2377939 .html