本文主要介绍如何访问各种终端的本地电话本数据。在 j2me 中访问电话本数据是比较困难的事情,特别是中低端机型。通常,各终端厂商都有自己的 API 用于访问电话本,例如, moto 的 phonebook 。在 jsr75 中, sun 推出了 PIM 包, 可访问电话本等本地数据,但是支持 jsr75 的手机终端大多是 06 出厂的手机。
普通S60 手机
前段时间,适用了一款 j2me 软 件,界面采用高级界面实现。由于之前没有高级界面开发经验,对高级界面的各种 API 也 不是特别熟悉,所以对该软件的“特殊功能”也少见多怪一番:该软件在 Nokia/6600 上 面,输入手机号码时,可以调出本地电话本,并可将电话本中的手机号码。反编译所有 class 文 件,并没有发现该软件导入了特殊的扩展包。对此深感疑惑, google , baidu 一番以后,终于获得答案。
大部分的 S60 终 端中,定义 TextFeild 时,将 constraints 指定为 PHONENUMBER , 即可。代码如下:
这应该属于 Nokia 厂 商的底层实现。目前,测试的手机中, Nokia/6600 和 Nokia/N72 是支持的,而 MOTO/E680 , Moto/A1200 , SEK700 以 及 Nokia/3100 等机型是不支持该功能的。希望对该问题感兴趣的 朋友,帮忙多做些测试,也是对这个问题的有效补充。
PIM 包
PIM 包定义了访问终端本地重要数据的 API ,本文的重点是讨论如何使用 PIM 访 问手机本地电话本。对于 PIM 的介绍,请参考 mingjava 的文章《 J2me 可 选包— PIM 介绍》。
- /**
- * 访问本地电话本数据
- *
- */
- private void pimVisit ()
- {
- String[] names = PIM.getInstance().listPIMLists(PIM.CONTACT_LIST);
- try
- {
- for ( int i = 0 ; i < names.length; i++)
- {
- display.append("AdrBookName: " + names[i] + "/n" );
- ContactList list = (ContactList) PIM.getInstance().openPIMList(
- PIM.CONTACT_LIST, PIM.READ_ONLY, names[i]);
- /*
- * 遍历所有的记录,这里主 要获取记录的姓名和电话号码
- */
- Contact contact;
- int count = 0 ;
- for (Enumeration e = list.items(); e.hasMoreElements();)
- {
- contact = (Contact) e.nextElement();
- String name;
- name = contact.getString(Contact.FORMATTED_NAME, 0 );
- String tel = contact.getString(Contact.TEL, 0 );
- display.append(name+" " +tel + "/n" );
- count++;
- }
- display.append("所有记录数量:" + count + "/n" );
- list.close();
- }
- }
- catch (PIMException e)
- {
- }
- }
使用 PIM 不 仅可以读取本地电话本数据,而且可以修改或增加电话本记录,这点也是上面所讨论的方法无法相比的。应该说, PIM 对电话本的操作更加灵活,并且可控制。