`
yydy1983
  • 浏览: 47680 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

编写Palm J2ME红外线“聊天”程序

阅读更多
红外线通信协议介绍

基于红外线的传输技术最近几年有了很大发展。目前广泛使用的家电遥控器几乎都是采用的红外线传输技术。作为无线局域网的传输方式,红外线方式的最大优点是不受无线电干扰,且它的使用不受国家无线管理委员会的限制。但是,红外线对非透明物体的透过性较差,导致传输距离受限制。

红外线是波长在750nm至1mm之间的电磁波,它的频率高于微波而低于可见光,是一种人的眼睛看不到的光线。红外通信一般采用红外波段内的近红外线,波长在0.75um至25um之间。红外数据协会(IRDA)成立后,为了保证不同厂商的红外产品能够获得最佳的通信效果,红外通信协议将红外数据通信所采用的光波波长的范围限定在850至900nm之内。

IRDA标准包括三个基本的规范和协议:物理层规范(Physical Layer Link Specification)、链接建立协议(Link Access Protocol:IrLAP)和链接管理协议(Link Management Protocol:IrLMP)。物理层规范制定了红外通信硬件设计上的目标和要求,IrLAP和IrLMP为两个软件层,负责对链接进行设置、管理和维护。在IrLAP和IrLMP基础上,针对一些特定的红外通信应用领域,IRDA还陆续发布了一些更高级别的红外协议,如TinyTP、IrOBEX、IrCOMM、IrLAN、IrTran-P和IrBus等等(见图1)。



图1 IrBus红外线通信协议层

Palm J2ME对红外口的操作介绍

事实上,Sun对基于Palm的Java程序设计提供了两种方法:一种是利用CLDC+KJava;另一种是利用CLDC+MIDP,然后通过MIDP4Palm将MIDP转换为Palm上可以运行的程序。前一种为编程方式,它无论从功能、对汉字的支持、还是运行速度上都高于后者,但是前一种提供的Java虚拟机KVM是单色的,不过可以选用完全兼容KVM的KAWT虚拟机来弥补此缺憾。后一种编程方式没有提供对红外口操作的类库或方法。

Sun公司的J2ME中的CLDC1.x,KJava为Palm提供了红外通信的API功能包。在KJava的API中,Palm 应程序中的主程序必须从J2ME的Spotlet类派生而来。



图2 Sun Java体系结构

Spotlet类提供了Palm经过红外口发送数据的静态方法beamSend()。在Palm应用程序中,只需要将待经红外线发送的数据转化为字节数组,直接利用beamSend()就可以将数据经红外口发送给别的设备,见下面程序代码。

<ccid_nobr></ccid_nobr>
<ccid_code></ccid_code>....  public boolean sendData(String s)  {   boolean state=false;   if (s!=null)     state=this.beamSend(s.getBytes());     return state;    }.......


对于红外线数据的接收,Spotlet类提供了 beamReceive(byte[]) 方法,将经红外口接收到的数据存储到一个字节数组中,进一步通过对此字节数组操作(如将其转化为字符串等),可以将获得的数据显示出来,见下面程序代码。

<ccid_nobr></ccid_nobr>
<ccid_code></ccid_code>//Receive beam Data   public void beamReceive(byte[] parm1) {    super.beamReceive( parm1);    beamData=new String(parm1);    System.out.print(“the received beam datab is:\n”+eamData);}


Palm J2ME红外线聊天程序

Palm红外线数据传输应用程序的编写,取决于经红外线通信的双方。通信的双方必须将接受红外线设置为Beam Receive: on。双方必须安装相应的红外通讯软件。

在此假设通信的双方均是Palm掌上电脑,双向使用红外线聊天系统。通信的双方可以采用相同的程序。系统的主要设计思路是:在Palm J2ME程序GUI中,构造两个TextField用于对话框,一个用于发送数据,另一个用于显示经红外口接收到的数据,然后在构造几个按钮,完成数据的发送、程序退出等(见图3)。



图3 Palm红外聊天程序

程序说明如下 :

(1)构造类BeamDemo,由于BeamDemo属于Palm 的J2ME程序的入口类必须由Spotlet派生,同时BeamDemo完成DialogOwner类(该类是否完成implements可选)如图4所示。



图4 BeamDemo UML类图

(2)设置BeamDemo的程序入口,代码如下。

<ccid_nobr></ccid_nobr>
<ccid_code></ccid_code>public static void main(String args[]) {		new BeamDemo().register(WANT_SYSTEM_KEYS);	}


Spotlet.register()的系统注册事件可以有两种:

一种为NO_EVENT_OPTIONS。如果注册了此类事件,Palm的几个功能键仍然可以被PalmOS操作系统使用。因此,由Spotlet派生来的程序可以不用设置程序的退出,直接由Palm的按钮完成。

另一种为WANT_SYSTEM_KEYS。如果注册了此类事件,Palm的几个功能键不被PalmOS操作系统使用,只能由程序控制使用。因此,由Spotlet派生来的程序,必须设置程序的退出退出代码,如:

<ccid_nobr></ccid_nobr>
<ccid_code></ccid_code>switch ( keyCode ) {	case 264: // Home button was pressed	System.exit(0); // exits program			break;			.........


否则系统无法退出。只有Reset Palm才能使系统退出。系统事件类型为使用系统键,该程序运行后会屏蔽系统键的功能,这样可以提高系统响应速度。

(3)用户界面的构造

为了演示Palm红外线的通信功能,我们在此只构造3个按钮、1个textField和1个textBox(如图3)。

<ccid_nobr></ccid_nobr>
<ccid_code></ccid_code>....static Graphics g = Graphics.getGraphics();//这里构造用户界面(如图1)Button button5 = new Button(“Exit”,117,139);Button button4 = new Button(“Clear”,69,139);Button button3 = new Button(“Send”,20,139);TextField textField2 = new TextField(“Please Data Here”,13,96,139,33);TextBox textBox1 = new TextBox(“This is the message that this\n System Received!\n\n”,15,8,137,73);//构造方法。public BeamDemo() {	button5.setEnabled(true);	button4.setEnabled(true);	button3.setEnabled(true);	textField2.setUpperCase(false);	textField2.setText(“”);	paint();}


(4)为了监听系统红外线口,必须重载Spotlet的beamReceive事件,Palm监听的数据是原始的字节,如果由数据到来,就将数据读入字节数组data[]中,将data[]构造出字符串,写入textBox1,代码如下:

<ccid_nobr></ccid_nobr>
<ccid_code></ccid_code>public void beamReceive(byte[] data) {		String receivedString=new String(data);		textBox1.setText(String.valueOf(receivedString));	}		public void dialogDismissed(String title) {		......	}	public void keyDown(int keyCode) {		if (textField2.hasFocus()) {			textField2.handleKeyDown(keyCode);		}	public void penDown(int x, int y) {		if (button5.pressed(x,y)) {			System.exit(0);		}		if (button4.pressed(x,y)) {			textBox1.setText(“”);		}      ...


(5)设置经过红外口,发送的内容。在BeamDemo程序中,使用textField2的内容作为要发送的数据。由于该数据是字符串,所以可以直接将字符串转换为字节数组,通过beamSend方法以字节的形式经过Palm红外口发送出。

<ccid_nobr></ccid_nobr>
<ccid_code></ccid_code>String text = textField2.getText();boolean suceeded = beamSend(String.valueOf(text).getBytes());if (textField2.pressed(x,y)) {	}	public void penMove(int x, int y) {	if (textField2.pressed(x,y)) {	}	public void penUp(int x, int y) {	}  }


总结

总体来讲,Palm J2ME红外程序的编写并不复杂,但要注意数据的发送是通过Spotlet的静态方法static booolean beamSend(byte[])实现的,而数据的获得必须重载beamReceive(byte[]) 方法,来提取接收的数据。另外,要注意Palm的模拟器POSE到目前为止并不支持红外线通信的模拟,该程序的调试必须在两台真实的Palm上进行。

在日常生活中,许多红外线遥控器都发送红外线指令给被控制电器。可以利用上述程序,将红外线遥控器对准Palm的红外口,由Palm捕获红外线遥控器发出的字节,并存放于Palm的内部数据库中,然后利用static booolean beamSend(byte[])发送给被控制电器,就会惊喜地发现,Palm完全可以替代红外线遥控器。

作者:李鲁群   来源:赛迪网
http://www.biplip.com/Default.aspx?tabid=36&mid=355&ctl=View&ItemID=195

 
分享到:
评论

相关推荐

    编写Palm J2ME红外线“聊天”程序.doc

    编写Palm J2ME红外线“聊天”程序.doc 编写Palm J2ME红外线“聊天”程序.doc

    J2ME简单的聊天程序

    J2ME简单的聊天程序涉及了网络编程、多线程、数据交换格式等多个知识点。通过Eclipse开发和运行,可以简化开发流程,提高效率。在实现过程中,还需要注意性能优化和安全性,以提供稳定、可靠的用户体验。

    j2me 手机蓝牙聊天系统

    【J2ME手机蓝牙聊天系统】是一个利用Java 2 Micro Edition (J2ME) 技术实现的移动设备间通信的应用。J2ME是Java平台的一个子集,专门设计用于资源有限的嵌入式设备,如手机和PDA。在这个系统中,用户可以通过手机的...

    基于j2me的手机聊天软件

    【基于J2ME的手机聊天软件】是一种在移动设备上运行的应用程序,它利用Java Micro Edition(J2ME)的框架来实现基本的即时通讯功能。J2ME是Java平台的一个子集,专为资源有限的设备如早期的智能手机和平板电脑设计,...

    手机J2ME程序编写教程

    **手机J2ME程序编写教程** Java Micro Edition(J2ME)是Java平台的一个子集,主要用于嵌入式设备和移动设备,如早期的智能手机。本教程将带你深入理解如何利用J2ME技术来开发手机应用程序。 ### 一、J2ME概述 ...

    郭克华J2ME聊天室

    《郭克华J2ME聊天室》是一款基于Java Micro Edition(J2ME)技术开发的移动设备聊天应用程序。J2ME是Java平台的一个子集,主要用于嵌入式系统和移动设备,如早期的智能手机和平板电脑。这个项目由郭克华开发,旨在...

    J2ME手机蓝牙聊天

    《J2ME手机蓝牙聊天程序详解》 J2ME(Java 2 Micro Edition)是Java平台上用于开发移动设备和嵌入式设备的应用程序框架。它为小型设备提供了强大的开发环境,使得开发者能够创建功能丰富的应用程序,包括游戏、实用...

    J2me版摄像头拍照程序

    标题提到的"J2me版摄像头拍照程序"是一个利用 J2ME 技术实现的移动应用,允许用户通过手机内置的摄像头进行拍照,并提供了其他相关功能。 1. **J2ME架构**: J2ME 包含了配置(Configurations)和 profiles(配置...

    J2ME聊天室源码

    J2ME聊天室源码,供大家一起共同分享学习。

    J2ME MIDP 手机游戏程序设计

    J2ME MIDP 手机游戏程序设计.isoJ2ME MIDP 手机游戏程序设计.isoJ2ME MIDP 手机游戏程序设计.isoJ2ME MIDP 手机游戏程序设计.isoJ2ME MIDP 手机游戏程序设计.isoJ2ME MIDP 手机游戏程序设计.isoJ2ME MIDP 手机游戏...

    用J2ME编写的QQ登录程序

    **J2ME简介** J2ME(Java 2 Micro Edition)是Java平台...总的来说,J2ME编写的QQ登录程序是一个典型的移动设备应用程序,涉及到了移动开发中的基本技术,如UI设计、网络通信、数据解析等,是学习移动开发的绝佳案例。

    J2ME编写的俄罗斯方块

    《J2ME编写的俄罗斯方块》是一款基于Java Micro Edition(J2ME)平台开发的经典游戏。J2ME是Java平台的一个子集,主要用于嵌入式设备和移动设备,如手机和PDA,提供轻量级的应用程序开发环境。这款俄罗斯方块游戏...

    快速转化J2ME程序为Android程序

    《快速转化J2ME程序为Android程序》 随着Android智能手机的普及,许多开发者面临的问题是如何将原有的J2ME应用程序高效地迁移到Android平台,以利用更广泛的设备和用户基础。J2MEBuilder,一个名为android_midp.jar...

    关于手机聊天的j2me源程序

    【描述】"用java编写的用手机聊天的j2me源程序 导入后可直接运行"表明此程序是开放源代码的,意味着开发者可以查看并修改源代码。这种源码级别的访问权限对于学习、调试和扩展软件功能非常有价值。用户只需将源代码...

    使用socket的J2ME聊天程序,可与J2SE的程序通信

    基于J2ME开发的聊天程序,使用socket,可与J2SE的程序连接,本人毕业设计的一部分,给做毕设的同学借鉴借鉴

    kAWT 0.90 for Palm SUNs J2ME CLDC KVM

    kAWT 0.90 for Palm SUNs J2ME CLDC KVMkAWT 0.90 for Palm SUNs J2ME CLDC KVMkAWT 0.90 for Palm SUNs J2ME CLDC KVMkAWT 0.90 for Palm SUNs J2ME CLDC KVM

    J2ME实现画图程序

    在这个J2ME实现的画图程序中,我们主要关注的是如何在移动设备上利用Java Micro Edition(J2ME)框架创建一个简单的画图应用。J2ME是Java平台的一个子集,专门用于嵌入式设备,如手机和PDA。在这个程序中,核心功能...

    J2ME 手机程序开发

    **J2ME手机程序开发** Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于嵌入式设备和移动设备,如早期的智能手机和平板电脑。它提供了开发和部署小型应用程序,称为MIDlets,的能力。J2ME在手机程序...

    QQ聊天+j2me+java

    J2ME由几个配置和 profiles 组成,其中Mobile Information Device Profile (MIDP) 和 Connected Limited Device Configuration (CLDC) 是为移动设备开发应用程序的关键组件。MIDP提供了用户界面和网络功能,而CLDC则...

    j2me版背单词程序

    《J2ME版背单词程序详解》 在移动设备领域,Java 2 Micro Edition(J2ME)曾是开发小型应用程序的主流平台,尤其适用于功能手机。本篇将深入探讨一款专为学习者设计的J2ME版背单词程序,该程序已在索爱750c上成功...

Global site tag (gtag.js) - Google Analytics