我知道使用聚合联系人_ids不是静态的,但可能会随着时间而改变(参见:Google Group Discussion)。
因此,在我的应用程序中,我存储内容查找键和所选联系人的当前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 ...
非常感谢任何帮助!
答案 0 :(得分: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;
}
答案 1 :(得分:0)
试试这个:
查询ContactsContract.Contacts.Entity。选择MIMETYPE =“vnd.android.cursor.dir / email_v2”,DATA1 =收到的电子邮件地址。
这将返回一个表,其中包含每个原始联系人的一行,其电子邮件地址与传入地址匹配,但该行还将包含原始联系人的聚合联系人ID。从那里,您可以查询ContactsContract.Contacts以查找LOOKUP_KEY。