4

rawcontactID を取得するために phonenumber をクエリしたいと思います。

連絡先について私が知っているのは、指定された電話番号だけですが、私の機能では rawcontactID が必要です。動作するコードを取得しましたが、今では 2 つの個別のクエリを使用しました。私がしたいのは、クエリ時間を節約するためだけに両方を実行できる1つのクエリです。

私のコード:

    Uri uri = Uri.withAppendedPath(Phone.CONTENT_FILTER_URI, Uri.encode(phoneNumber));       
    String[] columns = new String[]{Phone.CONTACT_ID, Phone.DISPLAY_NAME, Phone.NUMBER, Phone._ID };     
    Cursor cursor = contentResolver.query(uri, columns, null, null, null); 

if(cursor!=null) { 
    int clenght = cursor.getCount();
    while(cursor.moveToNext()){ 
     //contactName = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME)); 
     id = cursor.getString(cursor.getColumnIndex(Phone.CONTACT_ID)); 

    } 
    cursor.close(); 
}

Cursor pCur = contentResolver.query(ContactsContract.Data.CONTENT_URI, new String[]{ContactsContract.Data.RAW_CONTACT_ID}, ContactsContract.Data.CONTACT_ID+" = "+ id, null, null); 
if(pCur!=null) { 
    int clenght = pCur.getCount();
    while(pCur.moveToNext()){ 
     //contactName = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME)); 
     id = pCur.getString(pCur.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID)); 

    } 
    pCur.close(); 
}

前もって感謝します

編集:

上記のコードは正常に動作しますが、多数の連絡先の速度を上げることをまだ探しています。したがって、誰かが私のクエリを組み合わせるソリューションを持ってきたら、賞金をあげます。

4

2 に答える 2

2
private String[] getRawContactIdFromNumber(String givenNumber){
        List<String> rawIds = new ArrayList<String>();
        Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, new String[]{ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID},ContactsContract.CommonDataKinds.Phone.NUMBER + "='"+ givenNumber +"'",null, ContactsContract.CommonDataKinds.Phone.NUMBER);

        while (phones.moveToNext())
        {
          rawIds.add( phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID)));
          Log.v("contacts","Given Number: " + givenNumber + "Raw ID: " +rawIds.get(rawIds.size() - 1));
        }
        phones.close();
        String[] ret = new String[0];

        return rawIds.toArray(ret);
    }

効率化のため、カーソルに生の ID のみを含めるように編集されました。また、複数の連絡先が同じ番号を持つ場合に備えて、戻り値の型を配列に変更しました。

于 2012-11-24T04:13:30.577 に答える
0

してみてください

String phonenumber = "input your phone number";
        Cursor pCur = getContentResolver().query(
                ContactsContract.Data.CONTENT_URI,
                new String[] { ContactsContract.Data.RAW_CONTACT_ID,
                        Phone.CONTACT_ID }, Phone.NUMBER + " = " + phonenumber,
                null, null);


if (pCur != null) {
                while (pCur.moveToNext()) {
                    String contactID = pCur.getString(pCur
                            .getColumnIndex(Phone.CONTACT_ID));
                    String Rowid = pCur.getString(pCur
                            .getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID));
                    Log.e("RAW_CONTACT_ID", Rowid);
                    Log.e("CONTACT_ID", contactID);
                }
                pCur.close();
            }   

単一のクエリで両方を取得できるようになりCONTACT_IDました。RAW_CONTACT_ID

于 2012-11-23T11:37:31.230 に答える