本文主要介紹如何訪問各種終端的本地電話本數據。在J2ME中訪問電話本數據是比較困難的事情,特別是中低端機型。通常,各終端廠商都有自己的API用於訪問電話本,例如,moto的phonebook。在jsr75中,sun推出了PIM包,可訪問電話本等本地數據,但是支持JSr75的手機終端大多是06出廠的手機。
普通S60手機
前段時間,適用了一款J2ME軟件,界面采用高級界面實現。由於之前沒有高級界面開發經驗,對高級界面的各種API也不是特別熟悉,所以對該軟件的“特殊功能”也少見多怪一番:該軟件在Nokia/6600上面,輸入手機號碼時,可以調出本地電話本,並可將電話本中的手機號碼。反編譯所有class文件,並沒有發現該軟件導入了特殊的擴展包。對此深感疑惑,google,baidu一番以後,終於獲得答案。
大部分的S60終端中,定義TextFeild時,將 constraints指定為PHONENUMBER,即可。代碼如下:
Java 代碼
TextField text= newTextField(“電話”,null,12,TextFIEld.PHONENUMBER);
這應該屬於Nokia廠商的底層實現。目前,測試的手機中,Nokia/6600和Nokia/N72是支持的,而MOTO/E680,Moto/A1200,SEK700以及Nokia/3100等機型是不支持該功能的。希望對該問題感興趣的朋友,幫忙多做些測試,也是對這個問題的有效補充。
PIM包
PIM包定義了訪問終端本地重要數據的API,本文的重點是討論如何使用PIM訪問手機本地電話本。對於PIM的介紹,請參考mingJava的文章《J2ME可選包—PIM介紹》。
Java 代碼
/**
*訪問本地電話本數據
*
*/
privatevoidpimVisit()
{
String[]names=PIM.getInstance().listPIMLists(PIM.CONTACT_LIST);
try
{
for(inti=0;i<names.length;i++)
{
display.append("AdrBookName:"+names[i]+"
");
ContactListlist=(ContactList)PIM.getInstance().openPIMList(
PIM.CONTACT_LIST,PIM.READ_ONLY,names[i]);
/*
*遍歷所有的記錄,這裡主要獲取記錄的姓名和電話號碼
*/
Contactcontact;
intcount=0;
for(Enumeratione=list.items();e.hasMoreElements();)
{
contact=(Contact)e.nextElement();
Stringname;
name=contact.getString(Contact.FORMATTED_NAME,0);
Stringtel=contact.getString(Contact.TEL,0);
display.append(name+""+tel+"
");
count++;
}
display.append("所有記錄數量:"+count+"
");
list.close();
}
}
catch(PIMExceptione)
{
}
}
使用PIM不僅可以讀取本地電話本數據,而且可以修改或增加電話本記錄,這點也是上面所討論的方法無法相比的。應該說,PIM對電話本的操作更加靈活,並且可控制。