PIM是midp2.0的可选包。。它的实现有具体厂商的支持程度而定,它并不能提供一个整套的运行环境比如MIDP。他是对MIDP的扩展同时需要设备的支持。因此他并不是通用的,在移植性上存在。
在使用PIM OP之前我们必须判断它是否可用,方法很简单只是检查microedition.pim.version的属性值是不是null,例如:
// Check that PIM Optional Package is available
String v = System.getProperty( "microedition.pim.version" );
if( v != null ){
// PIMOP available
} else {
// PIMOP not available
}
// Check that PIM Optional Package is available
String v = System.getProperty( "microedition.pim.version" );
if( v != null ){
// PIMOP available
} else {
// PIMOP not available
}
你不能通过在代码中检查pim包是否可用来判断上述问题,因为pim是和设备实现相关的。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 );
// use the contact list
}
catch( PIMException ){
// no contact list available!
}
catch( SecurityException ){
// the application is not allowed to Access the list
}
PIM singleton = PIM.getInstance();
ContactList cl = null;
try {
cl = (ContactList)singleton.openPIMList(PIM.CONTACT_LIST,
PIM.READ_ONLY );
// use the contact list
}
catch( PIMException ){
// no contact list available!
}
catch( SecurityException ){
// the application is not allowed to Access the list
}
值得一提的是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 ){
// an error occurred
}
catch( SecurityException e ){
// can't read this list
}
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 ){
// an error occurred
}
catch( SecurityException e ){
// can't read this list
}