J2ME中訪問電話本數據是比較困難的事情,特別是中低端機型。通常,各終端廠商都有自己的API用于訪問電話本,例如,moto的phonebook。在jsr75中,sun推出了PIM包,可訪問電話本等本地數據,但是支持jsr75的手機終端大多是06出廠的手機。 本文主要介紹如何訪問各種終端的本地電話本數據。
普通S60手機
前段時間,適用了一款j2me軟件,界面采用高級界面實現。由于之前沒有高級界面開發經驗,對高級界面的各種API也不是特別熟悉,所以對該軟件的“特殊功能”也少見多怪一番:該軟件在Nokia/6600上面,輸入手機號碼時,可以調出本地電話本,并可將電話本中的手機號碼。反編譯所有class文件,并沒有發現該軟件導入了特殊的擴展包。對此深感疑惑,Google,baidu一番以后,終于獲得答案。
大部分的S60終端中,定義TextFeild時,將 constraints指定為PHONENUMBER,即可。代碼如下:
java 代碼
TextField text = new TextField(“電話”,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 代碼
/**
* 訪問本地電話本數據
*
*/
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對電話本的操作更加靈活,并且可控制。
(出處:http://m.survivalescaperooms.com)
新聞熱點
疑難解答