4

Nokia 5130c-2 XpressMusic で電話の電話帳と SIM phonenook の両方にアクセスしようとしています。アプリはエラーなしで実行されますが、電話の電話帳からの番号のみが返されます。このコードを使用して利用可能な電話帳を一覧表示すると

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){}


}
4

2 に答える 2

2

テキストまたは電話に電話番号を使用している場合は、1 行のコードでそれを行うことができます。電話ソフトウェアの問題が、アプリが 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 を押すと、TextField はパラメータ PHONENUMBER を持つ LCDUI テキスト フィールドと見なされ、Sim と電話のメモリの両方で連絡先を検索できます。これが、検索コマンド (通常は下部中央) に気付く理由です。また、電話機で使用中のメモリが Phone と Sim の両方に設定されていることを確認してください。

于 2012-07-06T21:54:17.463 に答える
1

PIMjavadocからの抜粋

PIMItemは、フィールドを介してデータを参照します。フィールドは、すべて類似した特性を持つデータ値のグループです。フィールドの例はTELです。これは、その特定のフィールドのデータ値が電話番号であることを示します。PIMItemインターフェイスを実装するクラスは、その特定のクラスに対して可能なフィールドを定義します(たとえば、TELは、連絡先がサポートする可能性のあるフィールドとしてContactインターフェイスで定義されます)。

PIM実装は、PIMItemインターフェースを実装するクラスで定義されたすべての可能なフィールドをサポートする必要はありません。これは、ネイティブPIMデータベースにこのAPIで定義されたすべてのフィールドが含まれていないためです。PIMItemが属するPIMListは、PIMItemがサポートおよび保存できるフィールドを決定します(特定のPIMList内のすべてのPIMItemは、同じフィールドのセットをサポートします)。PIMList.getSupportedFields()特定のPIMItemのPIMListのメソッドは、このアイテム内でサポートされているフィールドを見つけるために使用されます。 特定のPIMItemですべての可能なフィールドが実際にサポートされているわけではないため、取得または保存方法で使用する前に、を使用してアイテムのPIMListですべてのフィールドがサポートされているかどうかを確認する必要があります。 PIMList.isSupportedField(int)

各フィールドには、次の情報があります。

  • フィールドに関連付けられた0個以上のデータ値
  • フィールドのデータ値の属性
  • フィールドの説明ラベル
  • フィールドに関連付けられたデータのデータ型

完全なPIMjavadocは、このリンクで読み取ることができます。

デバイスがサポートするPIMフィールドContact.NAMEContact.TELデバイス上にあるかどうかを確認します。そうでない場合は、PIMList.getSupportedFields()デバイスでサポートされているフィールドを取得するために電話をかけ、それに応じてそのデバイスの名前と電話番号を取得する必要があります。私の記憶が正しければ、名前の代替フィールドはですContact.FORMATTED_NAME

于 2011-12-06T20:56:14.260 に答える