这几天单位要研究关于Sync4j的东西,主要是做手机中的联系人,便笺,日程什么的东西跟服务器同步,我想如果用J2me读出手机中的这些数据的话同步不是很方便的事情么,于是就找相关的资料,发现J2me的可选包PIM就是
personal infomation management(个人信息管理)可以完成这一功能,只是需要手机支持这个包,而且程序需要做数字签名,因为访问的属于敏感数据。
可选包( optional package),意思就是 他并不能提供一个整套的运行环境比如MIDP。他是对MIDP的扩展同时需要设备的支持。因此他并不是通用的,在移植性上存在 问题。
在使用PIM可选包时要判断它是否可用,因为它毕竟属于扩展包,检查方法很简单,只要检查 microedition.pim.version的属性值是不是null就可以了
例如:
String v = System.getProperty( "microedition.pim.version" );
if( v != null ) {
//表示PIM包不可用
}else{
//表示可用
}
不过实际我是用Nokia 6600手机测试,不支持的话连装都装不上去,直接报错-_-|||
PIM定义了三种信息类型,分别是Contact list,Event list , ToDo list,设备并一定要支持全部这三种类型,但是他至少要支持一种。
所有的API都在javax.microedition.pim包里面,你要通过PIM.getInstance()方法来得到PIM类,然后你才可以调用
openPIMList()方法得到上述的list.例如下面的代码:
PIM singleton = PIM.getInstance();
ContactList cl = null;
try {
cl = (ContactList)singleton.openPIMList(PIM.CONTACT_LIST, PIM.READ_ONLY );
}catch( PIMException ){
} catch( SecurityException ) {}
值 得一提的是SecurityException,为了安全只有可信任的MIDlets才可以访问这些数据。如果不是的话会抛出这个异常,这恰恰符合 MIDP中的安全模式。在PIM list中的数据称作PIM Item,你可以把PIM list看作是容器,把pim item看作是实体。要想访问这些item可以通过如下代码:
import java.microedition.pim.*;
import java.util.*;
ContactList list = ... // a contact list
try {
Enumeration enum = list.items();
while( enum.hasMoreElements() ){
Contact contact = (Contact) enum.nextElement();
// do something with the contact
} catch( PIMException e ) {
} catch( SecurityException e ) {}
在PIM item中可用的字段跟设备实现是相关的,因此在使用某个字段的时候有必要调用它的isSupportedField来判断一下,PIM 规范中同样对字段中的基本数据类型进行了定义,例如在Contact里面的TEL字段就是String你通过getStri()方法来得到,生日字段就是 long类型的通过getDate()来得到例如:
...
Contact contact = ...;
String tel = contact.getString( Contact.TEL, 0 );
...
...
Contact contact = ...;
long bday = contact.getDate( Contact.BIRTHDAY, 0 );
...
在contact里面包括多个字段,通过后面的index你可以访问他们。
程序在模拟器下试了一下,模拟器上看不出效果-_-!拿到实际手机上试,结果发现我的测试手机Nokia 6600不支持……>_<
看看都有那些手机支持PIM这个扩展包,可以参考http://www.j2mepolish.org/devices/devices-pdaapi.html这里,还算比较全:-)
另外,签名MIDlet应用,可以避免大量用户确认提示的出现,如果没有签名, 每打开一个联系人, 都会让你显式确认, 对于一个有200个联系人的CONTACT, 呵呵……
而在某些其他厂商的手机上,如MOTO,没有经过签名则根本不允许使用此类功能>_<
好了今天PIM就记录这些东西了,部分为网上查询到的资料:-)
可选包( optional package),意思就是 他并不能提供一个整套的运行环境比如MIDP。他是对MIDP的扩展同时需要设备的支持。因此他并不是通用的,在移植性上存在 问题。
在使用PIM可选包时要判断它是否可用,因为它毕竟属于扩展包,检查方法很简单,只要检查 microedition.pim.version的属性值是不是null就可以了
例如:
String v = System.getProperty( "microedition.pim.version" );
if( v != null ) {
//表示PIM包不可用
}else{
//表示可用
}
不过实际我是用Nokia 6600手机测试,不支持的话连装都装不上去,直接报错-_-|||
PIM定义了三种信息类型,分别是Contact list,Event list , ToDo list,设备并一定要支持全部这三种类型,但是他至少要支持一种。
所有的API都在javax.microedition.pim包里面,你要通过PIM.getInstance()方法来得到PIM类,然后你才可以调用
openPIMList()方法得到上述的list.例如下面的代码:
PIM singleton = PIM.getInstance();
ContactList cl = null;
try {
cl = (ContactList)singleton.openPIMList(PIM.CONTACT_LIST, PIM.READ_ONLY );
}catch( PIMException ){
} catch( SecurityException ) {}
值 得一提的是SecurityException,为了安全只有可信任的MIDlets才可以访问这些数据。如果不是的话会抛出这个异常,这恰恰符合 MIDP中的安全模式。在PIM list中的数据称作PIM Item,你可以把PIM list看作是容器,把pim item看作是实体。要想访问这些item可以通过如下代码:
import java.microedition.pim.*;
import java.util.*;
ContactList list = ... // a contact list
try {
Enumeration enum = list.items();
while( enum.hasMoreElements() ){
Contact contact = (Contact) enum.nextElement();
// do something with the contact
} catch( PIMException e ) {
} catch( SecurityException e ) {}
在PIM item中可用的字段跟设备实现是相关的,因此在使用某个字段的时候有必要调用它的isSupportedField来判断一下,PIM 规范中同样对字段中的基本数据类型进行了定义,例如在Contact里面的TEL字段就是String你通过getStri()方法来得到,生日字段就是 long类型的通过getDate()来得到例如:
...
Contact contact = ...;
String tel = contact.getString( Contact.TEL, 0 );
...
...
Contact contact = ...;
long bday = contact.getDate( Contact.BIRTHDAY, 0 );
...
在contact里面包括多个字段,通过后面的index你可以访问他们。
程序在模拟器下试了一下,模拟器上看不出效果-_-!拿到实际手机上试,结果发现我的测试手机Nokia 6600不支持……>_<
看看都有那些手机支持PIM这个扩展包,可以参考http://www.j2mepolish.org/devices/devices-pdaapi.html这里,还算比较全:-)
另外,签名MIDlet应用,可以避免大量用户确认提示的出现,如果没有签名, 每打开一个联系人, 都会让你显式确认, 对于一个有200个联系人的CONTACT, 呵呵……
而在某些其他厂商的手机上,如MOTO,没有经过签名则根本不允许使用此类功能>_<
好了今天PIM就记录这些东西了,部分为网上查询到的资料:-)