1

集計では、contact _idsは静的ではありませんが、時間の経過とともに変化する可能性があることを知っています(Googleグループディスカッションを参照)。

そのため、私のアプリでは、コンテンツ検索キーと選択した連絡先の現在のIDを保存しています。

私がやろうとしているのはこれです。特定のメールアドレスからメッセージが届いたら、電話の連絡先に問い合わせて、メールアドレスからのメッセージがそれらのいずれかに関連付けられているかどうかを確認し、その連絡先を保存されている連絡先と比較します。保存した連絡先_idとルックアップキーを使用して現在の連絡先_idを取得する新しいクエリ。

メールアドレスを使用して連絡先_idを見つけようとしている方法は次のとおりです。

String[] projection = {
    ContactsContract.Contacts.LOOKUP_KEY,
    ContactsContract.Contacts._ID
}

uri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Email.CONTENT_LOOKUP_URI, Uri.encode(data)); //data = email address
cur = resolver.query(uri, projection, null, null, null);

if (cur != null){
    while (cur.moveToNext()){
        msg.set_contact(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)), cur.getLong(cur.getColumnIndex(ContactsContract.Contacts._ID)));
    }
}

上記のコードは、電子メールアドレスが電話の連絡先に関連付けられていることを検出するという点で機能します。

問題:連絡先全体の_idではなく、生の電子メールアドレスエントリの_idを取得していると思います。保存されている連絡先_idを更新して、上記から返されたものと比較すると、メールが保存されている連絡先に関連付けられていることを確認したにもかかわらず、一致しないためです。

保存されている連絡先を検索する方法は次のとおりです。

String[] projection = {
    ContactsContract.Contacts.LOOKUP_KEY,
    ContactsContract.Contacts._ID
}

Uri uri = ContactsContract.Contacts.getLookupUri(contact_id, contact_lookup);

Cursor cur = resolver.query(cLookupUri, projection, null, null, null);
if(cur != null){
    while (cur.moveToNext()){
        msg.set_contact(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)), cur.getLong(cur.getColumnIndex(ContactsContract.Contacts._ID)));
    }
}

私は何が間違っているのですか?基本的に、受信メールアドレスに関連付けられている連絡先のcontact_idを取得したいだけです...

どんな助けでも大歓迎です!

4

2 に答える 2

4
    public Long getContactIdByEmail(String email) {
        Uri uri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Email.CONTENT_FILTER_URI, Uri.encode(email));
        String name = "?";
        long contactId =0;

        ContentResolver contentResolver = v.getContext().getContentResolver();
        Cursor contactLookup = contentResolver.query(uri, new String[] {ContactsContract.Data.CONTACT_ID, ContactsContract.Data.DISPLAY_NAME }, null, null, null);

        try {
            if (contactLookup != null && contactLookup.getCount() > 0) {

                contactLookup.moveToNext();
                name = contactLookup.getString(contactLookup.getColumnIndex( ContactsContract.Data.DISPLAY_NAME ));
                contactId = contactLookup.getLong(contactLookup.getColumnIndex(ContactsContract.Data.CONTACT_ID));

            }
        } finally {
            if (contactLookup != null) {
                contactLookup.close();
            }
        }

        return contactId;
    }
于 2015-01-17T17:00:06.950 に答える
0

これを試して:

クエリContactsContract.Contacts.Entity。MIMETYPE = "vnd.android.cursor.dir / email_v2"、およびDATA1=受信メールアドレスを選択します。

これにより、電子メールアドレスが受信アドレスと一致する生の連絡先ごとに1つの行を含むテーブルが返されますが、行には生の連絡先の集約連絡先IDも含まれます。そこから、ContactsContract.Contactsにクエリを実行して、LOOKUP_KEYを見つけることができます。

于 2012-11-02T20:32:59.570 に答える