Java me Can';t使用诺基亚手机访问/阅读SIM卡通讯录

Java me Can';t使用诺基亚手机访问/阅读SIM卡通讯录,java-me,contacts,nokia,sim-card,jsr75,Java Me,Contacts,Nokia,Sim Card,Jsr75,我正在尝试通过诺基亚5130c-2 XpressMusic访问手机的通讯录和SIM phonenook。 该应用程序运行时没有错误,但只返回手机通讯录中的号码。当我使用此代码列出可用的电话簿时 String[] all_contact_lists=PIM.getInstance().listPIMLists(PIM.CONTACT_LIST); 它给了我电话簿和SIM卡列表。即 1.电话 2.模拟 我曾尝试使用此代码从SIM卡中显式读取,但它仍然不返回任何信息(即使我在SIM卡中保存了号码)

我正在尝试通过诺基亚5130c-2 XpressMusic访问手机的通讯录和SIM phonenook。 该应用程序运行时没有错误,但只返回手机通讯录中的号码。当我使用此代码列出可用的电话簿时

String[] all_contact_lists=PIM.getInstance().listPIMLists(PIM.CONTACT_LIST);
它给了我电话簿和SIM卡列表。即 1.电话 2.模拟

我曾尝试使用此代码从SIM卡中显式读取,但它仍然不返回任何信息(即使我在SIM卡中保存了号码) 代码:

这是我的完整代码::

import javax.microedition.midlet.*;
import javax.microedition.pim.*;
import com.sun.lwuit.*;
import java.util.*;

public class contacts extends MIDlet
{
    private List my_list=new List();
    private String[] names=null;
    public void startApp()
    {
        Display.init(this);
       Form my_form=new Form("Contacts List");       
       String[] all_contact_lists=PIM.getInstance().listPIMLists(PIM.CONTACT_LIST);
       //Iterate through available phonebooks
       for(int db=0; db<all_contact_lists.length; db++)
       {
        try {
            ContactList clist = (ContactList) PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.READ_ONLY,
                    all_contact_lists[db]);
            Enumeration contacts=clist.items();
            while(contacts.hasMoreElements())
            {
                Contact contact=(Contact)contacts.nextElement();
                try{
                    String phone_contact="";
                    names=contact.getStringArray(Contact.NAME, 0);
                    for(int i=0; i<names.length; i++)
                    {
                        if(names[i]!=null)
                            phone_contact+=" "+names[i];
                    }
                    //my_list.addItem(phone_contact);
                    int phone_numbers=contact.countValues(Contact.TEL);
                    if(phone_numbers>0)
                    {
                         String number=contact.getString(Contact.TEL,0);
                        my_list.addItem(phone_contact+":"+number);
                    }
                    else
                    {
                        my_list.addItem(phone_contact);
                    }
                    //clist.removeContact(contact);
                }
                catch (Throwable t) {
            t.printStackTrace();
            }

            }
        } catch (PIMException ex) {
            ex.printStackTrace();
        }
       }
       //my_list.addItem(all_contact_lists);
       my_list.setRenderingPrototype("WWWWWWWWWWWWWWWWWWWW");
       my_form.addComponent(my_list);
       my_form.show();
       }
    public void pauseApp(){}
    public void destroyApp(boolean unconditional){}


}
import javax.microedition.midlet.*;
导入javax.microedition.pim.*;
导入com.sun.lwuit.*;
导入java.util.*;
公共类联系人扩展MIDlet
{
私有列表my_List=新列表();
私有字符串[]名称=null;
公开作废startApp()
{
Display.init(this);
表格my_Form=新表格(“联系人列表”);
String[]all_contact_LIST=PIM.getInstance().listPIMLists(PIM.contact_LIST);
//反复浏览可用的电话簿

对于(intdb=0;dbPIM javadoc的摘录

PIM项目通过字段引用其数据。字段是 具有相似特征的数据值。示例 字段是TEL,表示该特定字段的数据值 是电话号码。实现PIMItem接口的类 定义该特定类(例如TEL)的可能字段 在联系人界面中定义为联系人可以访问的字段 支持)

PIM实现不需要支持所有可能的功能 在实现PIMItem接口的类中定义的字段。 是因为没有本机PIM数据库包含定义的所有字段 在这个API中,PIMItem所属的PIMList决定了什么 PIMItem可以支持和存储的字段(特定项目中的所有PIMItem) PIMList支持相同的字段集)
PIMList.getSupportedFields()
方法从特定PIMItem的 PIMList用于确定此列表中支持哪些字段 由于不是所有可能的字段都在 对于特定项目,应在中检查所有字段是否支持 在使用前使用
PIMList.isSupportedField(int)
项目的PIMList 在任何检索或存储方法中。

每个字段都有以下可用信息:

  • 零个或多个与字段关联的数据值
  • 字段的数据值的属性
  • 字段的描述性标签
  • 与字段关联的数据的数据类型
在这里可以阅读完整的PIM javadoc


检查设备是否支持设备上的PIM字段
Contact.NAME
Contact.TEL
。如果不支持,则需要调用
PIMList.getSupportedFields()
获取设备上支持的字段,并相应地获取该设备的名称和电话号码。如果我没记错的话,名称的另一个字段是
联系人。格式化的\u name

如果您将电话号码用于文本或通话,则只需一行代码即可。现在很明显,手机软件软件问题可能会影响应用程序访问PIM API的方式。此外,如果手机联系人设置中使用的内存设置为SIM(单独),则您无法访问手机内存中的联系人,反之亦然,请确保两者都在使用。如果仍有问题,请尝试此操作

//make a text field in LWUIT that is declared globally

PhnNmbr = new TextField();

//set it to only accept phonenumber

PhnNmbr.setConstraint(TextField.PHONENUMBER);

//tell the user how to access phonebook

PhnNmbr.setHint("Press T9 then 'Search' to search phonebook");

//add a button or command 
//that either sends an sms to
//or calls the number in the text field
//or anything else you want to do with it

当用户按下T9键时,文本字段被视为带有参数PHONENUMBER的LCDUI文本字段,该参数允许用户在Sim卡和手机存储器中搜索联系人,这就是为什么您会注意到一个搜索命令(通常位于底部中间)。另外,请确保手机使用的内存设置为phone和Sim。

您好,请查看此链接。我已经浏览了该论坛,但它仍然没有回答我的问题。好的,看来我必须为此深入挖掘我的知识库。希望我能尽快找到解决方案。尝试编写一个简单的问题,阅读所有支持的字段在设备上打印PIM列表,并将其打印在表单中。接下来遍历每个字段并打印其值。这将为您提供实现目标所需考虑的字段的更好答案。
//make a text field in LWUIT that is declared globally

PhnNmbr = new TextField();

//set it to only accept phonenumber

PhnNmbr.setConstraint(TextField.PHONENUMBER);

//tell the user how to access phonebook

PhnNmbr.setHint("Press T9 then 'Search' to search phonebook");

//add a button or command 
//that either sends an sms to
//or calls the number in the text field
//or anything else you want to do with it