1

Android1.6の電話番号に基づいて連絡先情報を照会しようとしています。これは私が試したコードです。しかし、カーソルでカウントが0になります。

    String selection = "PHONE_NUMBERS_EQUAL(" + People.Phones.NUMBER + " , "   + phoneNumber + ")";
    Cursor cursor = mContext.getContentResolver().query(People.CONTENT_URI,
            new String[] {People._ID, People.NAME, People.Phones.NUMBER},
            selection, null, null);

なぜそれが機能しないのか分かりますか?

ありがとうございました。

4

2 に答える 2

4

URI を指定してクエリを使用すると、電話番号から連絡先情報を直接取得できます。

Uri contactUri = Uri.withAppendedPath(Contacts.Phones.CONTENT_FILTER_URL, Uri.encode(phoneNumber));

Cursor cursor = mContext.getContentResolver().query(contactUri, null, null, null, null);

上記のコードによって返されるカーソルには、探している連絡先が含まれている必要があり、必要な情報を取得できます...

if(cursor.moveToFirst()){
    int personIDIndex = cursor.getColumnIndex(Contacts.Phones.PERSON_ID);
    //etc
}
于 2010-07-14T19:40:48.720 に答える
1

電話番号は独自のテーブルに格納されるため、個別にクエリを実行する必要があります。電話番号テーブルを照会するには、SDK 変数 Contacts.Phones.CONTENT_URI に格納されている URI を使用します。指定した連絡先の電話番号を取得するには、WHERE 条件を使用します。

if (Integer.parseInt(cur.getString(
        cur.getColumnIndex(People.PRIMARY_PHONE_ID))) > 0) {
    Cursor pCur = cr.query(
            Contacts.Phones.CONTENT_URI, 
            null, 
            Contacts.Phones.PERSON_ID +" = ?", 
            new String[]{id}, null);
    int i=0;
    int pCount = pCur.getCount();
    String[] phoneNum = new String[pCount];
    String[] phoneType = new String[pCount];
    while (pCur.moveToNext()) {
        phoneNum[i] = pCur.getString(
                           pCur.getColumnIndex(Contacts.Phones.NUMBER));
        phoneType[i] = pCur.getString(
                           pCur.getColumnIndex(Contacts.Phones.TYPE));
        i++;
    } 
}

電話テーブルをクエリし、pCur に格納されている Cursor を取得します。Android の連絡先データベースは連絡先ごとに複数の電話番号を保存できるため、返された結果をループ処理する必要があります。電話番号を返すだけでなく、クエリは番号の種類 (自宅、職場、携帯電話など) も返しました。

1.6 以前の Android Contacts API の操作に関するこのチュートリアルもお読みください。

于 2010-07-14T19:39:39.547 に答える