BlackBerry J2ME 编程指南(三)
来源:互联网 发布:linux中arp命令解释 编辑:程序博客网 时间:2024/06/10 04:58
作者: 王志刚
2.4 File I/O
在J2ME中File操作作为JSR75的一部分,被转移到了javax.microedtion.io.file下面,如下图所以。
不同于标准java中的io下大量的文件操作支持,J2ME中的文件操作主要是针对移动设备的具体需求
Javax.microedition.io.file —— 提供对本地文件系统的访问功能
ConnectionClosedException —— 当试图对一个已经关闭的 FileConnection 对象进行操作时,会抛 出此异常。
FileConnection —— 这是一个很关键的类,基本上文件读写都是有该类完成。可以从字面上去理解它 的意思。
FileSystemEventHandler ——事件侦听。
FileSystemListener —— 用于监听文件系统目录状态的变化,比如文件的删除、新增,存储卡的拔出 和插入等。
FileSystemRegistry —— 用于管理和跟踪文件系统的监听器,以及可以通过此类过去当前所有文件系 统的根目录。
IllegalModeException —— 文件打开模式异常,当试图写入以只读方式打开的文件时,会抛出该异 常。
2.5 GUI
J2SE提供了丰富的UI组件也强大的UI展示技术,甚至可以java代码通过applet植入到web页面中。
在标准的J2ME编程中,我们放弃掉了大量需要消耗系统资源的UI支持,转而针对小型的终端设计了一个特
殊的包
由于在MIDP手机编程中,没有控制台的概念,所以所有的MIDP手机软件都必须有自己的界面,下面就熟悉 一下MIDP的界面类体系。
首先说明的是,MIDP的标准界面类都位于javax.microedition.lcdui包中,使用时一定要记得引入。 在界面体系中,所以可以直接显示的界面类都继承自同一个父类——Displayable。根据是否能直接操作屏 幕,以及是否和屏幕尺寸相关,MIDP的界面类分为两大类:
1) 高级用户界面——和屏幕大小无关,不能直接操作屏幕 高级用户界面类可以不需要修改就可以在所有支持Java的手机上显示,不同的手机显示方式会有所不同, 但功能均可以正常使用。特别适合做对于界面要求不高的手机应用软件。 高级用户界面中的类又分为两个部分:
1、容器类
容器类是指直接或者是间接继承自Displayable,可以直接在屏幕上显示的类。这些类都有一个统一的父类
——Screen类,其他的都是实现的容器类,包括以下几个:
Alert——提示框 Form——窗体 List——列表框
TextBox——文本盒,多行文本框 以上这些类除了Screen类以外,都代表一类界面,在实际的开发过程中,即可以直接使用(只使用其对象) 也可以使用继承。
2、控件类 控件类是指那些不能在屏幕上直接显示,必须添加到容器类(注:MIDP中的所有控件类均只能添加到Form中) 才可以显示的类。这些类也有一个统一的父类Item类,其它的都是实现的控件类,包括以下几个:
ChoiceGroup——选择框,包括单选和多选
DateFiled——日期文本框 Gauge——进度条 ImageItem——图片项目 StringItem——可变字符串项目 TextFiled——单行文本框
在MIDP2.0中,新增两个控件: CustomItem——个性化项目,可以实现自己的控件 Spacer——空白
在实际的使用中,根据界面的需要,选择合适的控件种类,然后添加到Form中进行显示。
2) 低级用户界面——和屏幕大小相关,可以直接操作屏幕 低级用户界面可以让程序员直接操作界面,例如可以在屏幕上方便的绘制图片、文字以及基本的图形等, 可以在手机中表现复杂的界面,所以很适合进行手机游戏以及移动证券之类的软件开发。但是低级界面一 般和屏幕大小关系比较密切,所以在不同的手机型号之间实现的时候,一般需要进行移植。 低级用户界面主要包括两个类:
1、Canvas——手机画布 该类代表手机屏幕,包含获得屏幕属性的一系列方法、事件处理的方法,以及最核心的paint绘制方法等。 在MIDP2.0中该类有一个子类——GameCanvas。
2、Graphics——画笔 系统所有的绘制动作都通过该类实现,包含一般的绘制方法、设置字体或颜色的方法以及一些技巧操作的 方法等。
低级用户界面可以理解为使用Graphics这样一个画笔类在Canvas上进行绘制。 当然还有一个在高级用户界面和低级用户界面都可以使用的类——Command(软按钮类),使用该类可以在界 面中实现软按钮的功能。 这种编程习惯和改变,是与J2SE的差别很大的,所以也有一种说法是突破了MIDP的UI,也就突破了J2ME的 编程。
在BlackBerry上的MIDP编程部分,我们回过头来考虑如何进行有效的UI编程。
2.7 Applet
这个是专属J2SE的东西,J2ME没有支持,实际上Midlet的设计很多是参考了Applet的。
2.8 Network
相比较 J2SE 不断升级的在网络编程上的支持和复杂的开发流程,J2ME 的网络编程显得非常轻巧,相比较于如 下的 J2SE 的庞大的网络编程类库,J2ME 的网络编程显得异常简单。
J2ME 的 MIDP 在 javax.microedition.io 程序包中提供了一整套类,统称为通用连接构架(Generic Connection
Framework ,GCF)。GCF 使得与其它设备的可编程传输(programmatically transferring)数据变得非常容 易。
通用连接框架(Generic Connection Framework,GCF)为资源有限的设备提供了一个可扩展的、通用的 I/O 框 架。GCF 是一组在 javax.microedition.io 包中定义的接口。
GCF 的类层次结构
在 GCF 中共定义了七个接口 ,其中 Connection 是最基本的连接类型。且同时提供了对数据包和流 连接的支持。沿着层次结构向下派生出提供更多功能的接口。例如, StreamConnection 接口支持输入流 和输出流, ContentConnection 接口又扩展了 StreamConnection 接口以支持对流的内容类型、数据长度 和编码格式的确定,HttpConnection 接口又扩展了 ContentConnection 接口以支持对于标准的 HTTP 请求。 如在框架层规定的适用于手机或双向寻呼机的移动信息设备框架 MIDP(Mobile Information Device
Profile)在其 MIDP 1.0 规范只要求设备支持 HTTP 连接协议,而更新的 MIDP 2.0 规范要求同时支持
HTTP 和 HTTPS,后者提供了对更安全的网络连接的支持
2.9 Database
在 J2SE 中,通过标准的 JDBC 的数据库访问,基本上已经成为一种标准。但是 J2ME 的框架下,数据库的操 作没有直接支持,没有 JDBC 的直接支持。
在 J2ME 编程中,如果涉及到 database 操作,可以参考使用一些方法转换数据库应用,比如 web service。
第三篇 blackberry 上的 J2ME 编程
在对 J2ME 的编程有了些具体的认识,也了解到了主要的和一些关键的 J2SE 和 J2ME 的编制程序上的差别, 我们就可以进入到 BlackBerry 上的 J2ME 编程的世界。
在这一部分,我们将会介绍在黑莓上进行 Midlet 编程开发的一个常规过程以及 BlackBerry 开发平台为
midlet 的开发提供了哪些便利和强有力的支持和补充。
1 开发包支持
BlackBerry 平台提供了一个 Eclipse 插件,用来对 midlet 进行开发编程。对于希望使用 BlackBerry 进行
midlet 开发的人,只需要遵循如下步骤:
1. 下载并安装 Eclipse 及 BlackBerry Java Plug-in for Eclipse(最新的开发包在 csdn 的黑莓开发专区已 经可以下载了)
本文使用的 BlackBerry Java Plug-in for Eclipse 版本为: v1.1 beta2 (下载地址:
http://na.blackberry.com/eng/developers/devbetasoftware/javaplugin.jsp )
2. 根据向导,建立黑莓项目
3.安装 EclipseME 插件 -- Installing via the EclipseME Update site http://eclipseme.org/docs/installEclipseME.html#step2b
4.修改项目配置,指定 midlet 属性。
然后,就可以体验黑莓上的 midlet 开发乐趣了。
关于 blackberry 插件开发 midlet 的详细指南,请参考如下链接:
http://blog.csdn.net/salvatore_zhang/archive/2010/05/06/5564186.aspx
2 UI 开发支持
对于 Midlet 的 UI 开发,在 BlackBerry 平台上有多种解决方案: 可以使用 MIDP 的原生高级低级 API,也就是 LCDUI 来进行开发。
使用 BlackBerry 的特有 API 组件,类似 SUN 的 KJAVA 组件来进行高级的 UI 开发
可以使用 Widget 技术来结合 Midlet 和 WEB 的 UI
关于 blackberry 上的 BlackBerry 的 UI 开发的详细介绍,请参考如下文章:
http://blog.csdn.net/salvatore_zhang/archive/2010/05/06/5564433.aspx
3 blackberry native API 的混用
在 BlackBerry 的 MIdlet 开发过程中,除了 UI,其余的 API 都可以混用的,通过这种方式,能极大 的弥补标准 JSR 对黑莓手机具体应用开发需求的缺陷。同时,结合黑莓原生 API 的使用,可以让 Midlet 应用本身更加切合 BlackBerry 系统的特征。
3.1 关于 blackberry 应用和 midlet 应用的集成
3.1.1 用 RMS 在 MIDlet 和 BlackBerry 之间共享数据
对于很多没有 BlackBerry 应用经验的开发者,或者对于很多现有的 J2ME 的系统,如果以最小的代 价和 BlackBerry 应用交互,或者和 BlackBerry 应用集成,这是一个很好的方法。同时,这也是对
老的 J2ME 应用和 BlackBerry 的新应用迁移和同步数据的一个好办法。既然 BlackBerry 开发对
J2ME 提供支持,所以 RMS 可以被用来作为这种解决的首选。
3.1.2 使用全局事件来进行应用交互
BlackBerry 平台提供了事件模型,用来在不同的应用之间通信,在使用事件模型的时候需要注意 如下事项:
· 任何应用程序都可以发布或者监听全局事件
· 通过响应全局事件可以在一个应用程序中执行一些本来应该在另一个应用中出现的动作
· 通过发送全局事件也可以在应用程序之间传递数据
3.1.3 使用 RUNTIME Store 来应用交互
相对于静态的 RMS 的繁琐配置和不灵活,BlackBerry 提供的运行时存储(runtime store) 非常灵 活和方便,它在平台即被提供了如下功能。
· 运行时存储提供一个中间区域让不用应用可以共享对象
· 通过数字签名的任何应用程序都可以访问运行时存储
3.2 Midlet 和 blackberry 应用互操作
通过 BlackBerry 平台提供的强大应用交互功能,应用开发者可以: 在你的 Midlet 应用中调用 BlackBerry 设备应用软件
在 BlackBerry 应用程序中调用 Midlet
在设备应用中植入内容
在 Midlet 应用中植入 BlackBerry 系统 UI
详细的内容,可以参考如下文章:
http://www.blackberry.com/developers/docs/5.0.0api/App-Integration-summary.html
3.3 对 GPS 的补充
GPS 是 MIDP 设备上的几乎算标配的功能了。运行 BlackBerry® Device Software 5.0.0 或更高版本的
BlackBerry 设备支持 BlackBerry® extensions to JSR 179。
在 MIDLet 应用中,导入所需的类。
import net.rim.device.api.gps.*;创建类和构造函数。
public class handleGPS
{
BlackBerryCriteria myCriteria;
public handleGPS()
{
}
}在构造函数中,创建 try/catch 块。 在该块中,将 GPS 模式作为参数传递给构造函数,从而创建
BlackBerryCriteria 类的实例。
try
{
myCriteria = new BlackBerryCriteria(GPSInfo.GPS_MODE_ASSIST);
}
catch ( UnsupportedOperationException ex )
{
return;
}在构造函数中,如果您指定的第一种 GPS 模式无法检索 GPS 修正,则调用 setFailloverMode() 来 指定要使用的 GPS 故障转移模式。 成功检索第一个修正后,调用 setSubsequentMode() 来指定要 使用的后续 GPS 模式。
myCriteria.setFailoverMode(GPSInfo.GPS_MODE_AUTONOMOUS, 3, 100); myCriteria.setSubsequentMode(GPSInfo.GPS_MODE_AUTONOMOUS);要验证 GPS 模式是否受到支 持,请调用 GPSInfo.isGPSModeAvailable() 并将 GPS 模式作为参数传递。 如果该模式受到支持,则 调用 setMode() 来指定 GPS 模式。
public class handleGPS
{
public handleGPS()
{
BlackBerryCriteria myCriteria = new BlackBerryCriteria();
if (GPSInfo.isGPSModeAvailable(GPSInfo.GPS_MODE_ASSIST))
myCriteria.setMode(GPSInfo.GPS_MODE_ASSIST);
else if (GPSInfo.isGPSModeAvailable(GPSInfo.GPS_MODE_AUTONOMOUS))
myCriteria.setMode(GPSInfo.GPS_MODE_AUTONOMOUS);
}
}
4 日志支持
由于 j2me 不支持管道流,无法像 J2SE 那样把调用栈打出,不过 BlackBerry 提供的内置的 event log,可以通过答应 throwable 的 callstack,这样自动就可以打印输出到系统日志,然后导出,就 可以。这里以一个运行时候异常为例
实例代码如下,
catch (Throwable e) {
//Dialog.inform("exception"); System.err.println("io execption");
//类 GUID 变量定义
long GUID = 0x9999999999999999L;
//登记日志事件
EventLogger.register(GUID, "LMLogger", EventLogger.VIEWER_STRING); String eventData = "smsApp: sms1";
//记录事件
EventLogger.logEvent(GUID, eventData.getBytes() , EventLogger.ALWAYS_LOG);
e.printStackTrace();
}
long GUID = 0x9999999999999999L;
EventLogger.register(GUID, "LMLogger", EventLogger.VIEWER_STRING); String eventData = "smsApp: sms2";
EventLogger.logEvent(GUID, eventData.getBytes() , EventLogger.ALWAYS_LOG);
在手机上面直接查看 eventlog, 按住 ALT 键,按 lglg 或者是导出文本在电脑上查看
javaloader.exe -u eventlog > mylog.txt
最后系统的 event log 中,可以看到如下输出,
guid:0x9C3CD62E3320B498 time: Thu Jun 17 17:09:03 2010 severity:1 type:3 app:Java Exception data: RuntimeException
blocking operation not permitted on event dispatch thread net_rim_cldc-19(4BAE2663)
EventThreadCheck throwException
0x1F87
net_rim_cldc-18(4BAE2663) NativeTransport
send
0x76D1
net_rim_cldc-19(4BAE2663) Transport
send
0x9266
net_rim_cldc-19(4BAE2663) Protocol
send
0x3702
Smsfor8910(4C19EC08) Smsfor8910RIMResources
<clinit>
0x114
net_rim_cldc-11(4BAE2663)
Field fieldChangeNotify
0xBCD
net_rim_cldc-14(4BAE2663) ButtonField
<private>
0x270C
net_rim_cldc-14(4BAE2663) ButtonField trackwheelUnclick
0x22E0
net_rim_cldc-12(4BAE2663) Manager
trackwheelUnclick
0x249D
net_rim_cldc-12(4BAE2663) Manager
trackwheelUnclick
0x249D
net_rim_cldc-12(4BAE2663) Screen
trackwheelUnclick
0x9693
net_rim_cldc-12(4BAE2663) Screen dispatchNavigationEvent
0x71CD
net_rim_cldc-13(4BAE2663) UiEngineImpl processMessage
0x7964
net_rim_cldc-8(4BAE2663) Application
<private>
0x29A4
net_rim_cldc-8(4BAE2663) Application processNextMessage
0x1ADD
net_rim_cldc-8(4BAE2663) Application enterEventDispatcher
0x1A1A
Smsfor8910(4C19EC08) MyThread
run
0x9A
BlackBerry SDK下载
相关链接:
BlackBerry J2ME 编程指南(一)
BlackBerry J2ME 编程指南(二)
BlackBerry J2ME 编程指南(三)
- BlackBerry J2ME 编程指南(三)
- blackberry平台J2ME编程指南(三)
- BlackBerry J2ME 编程指南(一)
- BlackBerry J2ME 编程指南(二)
- blackberry平台J2ME编程指南(一)
- blackberry平台J2ME编程指南(二)
- blackberry平台J2ME编程指南(四)
- blackberry平台J2ME编程指南(五)
- blackberry平台J2ME编程指南(六)
- blackberry平台J2ME编程指南(七)
- blackberry平台J2ME编程指南(八)
- blackberry平台J2ME编程指南(九)
- blackberry平台J2ME编程指南(十)
- BlackBerry 蓝牙编程(三)
- BlackBerry 蓝牙编程(三)
- blackberry触摸屏设备编程(三)
- 得到blackberry中的联系人信息(j2me)
- J2ME手机编程心得(三)
- 介绍几个ASP.NET中容易忽略但却很重要的方法函数
- Hibernate入门 - 基础配置
- 关于建模
- Hibernate入门 - 包作用详解
- 企业发展与关注焦点
- BlackBerry J2ME 编程指南(三)
- 外包服务标准杂记
- 〈大学〉问——王守仁
- 思考
- 3G对应用的影响
- 教师节的祝福
- 人力资源管理思考
- 项目范围是项目成败的关键
- Java面试中经常问到的算法题