Не могу получить доступ / прочитать телефонную книгу на SIM-карте в Nokia - PullRequest
4 голосов
/ 30 ноября 2011

Я пытаюсь получить доступ к телефонной книге телефона и телефонной книге на SIM-карте Nokia 5130c-2 XpressMusic.Приложение работает без ошибок, но возвращает только цифры из телефонной книги телефона.Когда я перечисляю доступные телефонные книги, используя этот код

String[] all_contact_lists=PIM.getInstance().listPIMLists(PIM.CONTACT_LIST);

, мне выдаются списки как телефонной книги, так и SIM-карты.т.е. 1. Телефон 2. SIM

Я попытался явно прочитать с SIM-карты, используя этот код, но он все равно ничего не возвращает (даже если у меня есть номера, сохраненные на SIM-карте.) Код:

ContactList clist = (ContactList) PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.READ_ONLY,
                "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){}


}

Ответы [ 2 ]

2 голосов
/ 07 июля 2012

Если вы используете номер телефона для текста или для вызова, вы можете сделать это только с одной строкой кода.Теперь очевидно, что проблемы программного обеспечения телефона могут влиять на то, как приложение обращается к API PIM.Кроме того, если память, используемая в настройках контактов телефона, установлена ​​на 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, TextField считается текстовым полем LCDUI с параметром PHONENUMBER, который позволяет ему искать контакты как в Sim, так и в памяти телефона, то естьпочему вы заметите команду поиска (обычно внизу в центре).Также убедитесь, что память, используемая для телефона, установлена ​​на Phone и Sim.

1 голос
/ 07 декабря 2011

выдержка из PIM javadoc

PIMItems ссылаются на свои данные через поля. Поле - это группа значения данных, которые имеют схожие характеристики. Пример поле TEL, которое указывает значения данных для этого конкретного поля являются номерами телефонов. Классы, реализующие интерфейс PIMItem определяет возможные поля для этого конкретного класса (например, TEL определяется в интерфейсе контакта как поле, которое контакт может поддержка).

Реализации PIM не обязаны поддерживать все возможные поля, определенные в классах, реализующих интерфейс PIMItem. This потому что ни одна собственная база данных PIM не содержит все определенные поля в этом API. PIMList, к которому принадлежит PIMItem, определяет, что поля, которые PIMItem может поддерживать и хранить (все PIMItem в определенном PIMList поддерживает тот же набор полей). PIMList.getSupportedFields() метод из конкретного PIMItem's PIMList используется, чтобы узнать, какие поля поддерживаются в этом вещь. Поскольку не все возможные поля фактически поддерживаются в конкретный PIMItem, все поля должны быть проверены на поддержку в PIMList элемента с использованием PIMList.isSupportedField(int) до его использования в любом методе поиска или хранения.

Каждое поле имеет следующую информацию:

  • Ноль или более значений данных, связанных с полем
  • Атрибуты для значений данных для поля
  • Описательная метка для поля
  • Тип данных данных, связанных с полем

Полный JAVADOC PIM можно прочитать по этой ссылке .

Проверьте, поддерживает ли устройство поля PIM Contact.NAME и Contact.TEL на вашем устройстве. Если нет, то вам нужно позвонить PIMList.getSupportedFields(), чтобы получить поддерживаемое поле на устройстве и, соответственно, получить имя и номер телефона для этого устройства. Если я правильно помню, альтернативное поле для имени Contact.FORMATTED_NAME.

...