J2ME查找手机电话本

概述:J2ME访问手机电话簿需要JSR75的支持,下面是一个查找手机电话簿的具体例子,分析请参看代码注释。

/**************************************

* ContactListMid.java

**************************************/

package ui;

 

import javax.microedition.lcdui.*;

import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

import javax.microedition.pim.*;

 

public class ContactListMid extends MIDlet implements CommandListener {

 

public Display display;

public List bookList;

 

private Command cmdOK;

private Command cmdExit;

private Ticker ticker;

private String[] phoneBook; //用于保存电话簿类型

 

public ContactListMid() {

display = Display.getDisplay(this);

 

//查看手机是否支持JSR75

String v = System.getProperty( "microedition.pim.version" );

if( v != null ){

//支持PIM查找

phoneBook = PIM.getInstance().listPIMLists(PIM.CONTACT_LIST);

}

else {

//不支持PIM查找

Alert alert = new Alert("Error", "PIM not supported!", null, AlertType.ERROR);

alert.setTimeout(Alert.FOREVER);

display.setCurrent(alert);

}

 

bookList = new List("Phonebook list", Choice.IMPLICIT, phoneBook, null);

ticker = new Ticker("Please choose a phone book.");

cmdOK = new Command("OK", Command.OK, 1);

cmdExit = new Command("Exit", Command.EXIT, 1);

 

bookList.setTicker(ticker);

bookList.addCommand(cmdOK);

bookList.addCommand(cmdExit);

bookList.setCommandListener(this);

 

System.out.println("constructor.");

}

 

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

System.out.println("Destroy app.");

 

}

 

protected void pauseApp() {

System.out.println("Pause app.");

 

}

 

protected void startApp() throws MIDletStateChangeException {

display.setCurrent(bookList);

System.out.println("Start app.");

}

 

public void commandAction(Command c, Displayable d) {

if( c == cmdOK || c == List.SELECT_COMMAND )

{

int i = bookList.getSelectedIndex(); //选择电话簿

ContactListForm cl = new ContactListForm(this, phoneBook[i]);

display.setCurrent(cl);

}

else if(c == cmdExit)

{

try {

destroyApp(false);

} catch (MIDletStateChangeException e) {

e.printStackTrace();

}

notifyDestroyed();

}

}

}

 

/**************************************

* ContactListForm.java

**************************************/

package ui;

 

import java.util.Enumeration;

import java.util.Vector;

import javax.microedition.lcdui.*;

import javax.microedition.pim.*;

 

public class ContactListForm extends Form implements CommandListener {

 

private ContactListMid md;

private Command cmdBack;

private Command cmdExit;

 

//Save contacts

private Vector names;

private Vector tels;

private Vector emails;

 

public ContactListForm(ContactListMid md, String phoneBook) {

super(phoneBook);

 

this.md = md;

cmdBack = new Command("Back", Command.BACK, 1);

cmdExit = new Command("Exit", Command.EXIT, 1);

addCommand(cmdBack);

addCommand(cmdExit);

setCommandListener(this);

 

names = new Vector();

tels = new Vector();

emails = new Vector();

 

new PimVisitThread(phoneBook).start(); //开始电话簿访问线程

}

 

public void commandAction(Command c, Displayable d) {

if(c == cmdBack)

{

md.display.setCurrent(md.bookList); //返回电话簿选择列表

}

}

 

public class PimVisitThread extends Thread {

public int contactsNum = 0;

private String bookName;

private String name;

private String tel;

private String email;

 

public PimVisitThread(String bookName)

{

this.bookName = bookName;

}

 

public void run()

{

char ch = '~'; //判断标志

try

{

ContactList list = (ContactList) PIM.getInstance().openPIMList(

PIM.CONTACT_LIST, PIM.READ_ONLY, bookName);

 

for (Enumeration e = list.items(); e.hasMoreElements();)

{

Contact contact = (Contact) e.nextElement();

if(contact.countValues(Contact.FORMATTED_NAME) != 0) //联系人姓名

{

name = contact.getString(Contact.FORMATTED_NAME, 0);

names.setSize(contactsNum);

names.insertElementAt(name, contactsNum);

}

if(contact.countValues(Contact.TEL) != 0) //联系人电话

{

tel = contact.getString(Contact.TEL, 0);

tels.setSize(contactsNum);

tels.insertElementAt(tel, contactsNum);

}

if(contact.countValues(Contact.EMAIL) != 0) //联系人email地址

{

email = contact.getString(Contact.EMAIL, 0);

emails.setSize(contactsNum);

emails.insertElementAt(email, contactsNum);

}

else {

email = null;

}

 

contactsNum ++;

 

//为了不占屏幕显示空间,首字母相同的联系人只显示第一条

if(name.charAt(0)!=ch || email!=null)

{

ch = name.charAt(0);

append("/nName: "+ name +"/n");

append("Tel: "+ tel +"/n");

append("Email: "+ email +"/n");

}

else //其他联系人以"."代替

append(".");

}

 

append("/nTotal contacts:" + contactsNum + "/n");

list.close();

addCommand(cmdSrch);

}

catch (PIMException e) {

e.printStackTrace();

}

}

}

}

上面的代码实现了对手机电话簿的访问及显示,为了不占太多手机屏幕,不同的联系人首字母只显示对应的第一条联系人记录。

 

 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值