
除了联系人ID之外,Android还获得了LOOK_UP键.由于联系人的ID可以更改,因此您可以使用LOOK_UP键获取用户uri.
public static Uri lookupContactUri(String lookup, Context context){ ContentResolver contentResolver = context.getContentResolver(); Uri lookupUri = Uri.withAppendedpath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookup); return ContactsContract.Contacts.lookupContact(contentResolver, lookupUri);}但是它是如何工作的呢? Contacts.lookupContact的源代码对实际实现并没有太多介绍.那么,谁能解释他们如何设法做到这一点呢?
/** * Computes a content URI (see {@link #CONTENT_URI}) given a lookup URI. * <p> * Returns null if the contact cannot be found. */ public static Uri lookupContact(ContentResolver resolver, Uri lookupUri) { if (lookupUri == null) { return null; } Cursor c = resolver.query(lookupUri, new String[]{Contacts._ID}, null, null, null); if (c == null) { return null; } try { if (c.movetoFirst()) { long contactID = c.getLong(0); return ContentUris.withAppendedID(Contacts.CONTENT_URI, contactID); } } finally { c.close(); } return null; }我测试的另一件事是使用ContactsContract.AggregationExceptions合并两个联系人,然后为联系人uri挖掘.两个LOOK_UP密钥的产生都具有与预期相同的接触uri.
那么他们如何做呢?
解决方法:
由于联系人ID可能会不时更改(例如,当联系人同步被破坏并且需要从服务器重新同步联系人时),AndroID引入了LookupKeys和LookupUris的概念.
LookupKey是一个不透明的值,可以由Contacts框架在内部将其转换为一组字段:contact-ID,raw-contact-ID,primary-display-names等.
每当您尝试通过LookupUri访问联系人时,系统会从Uri中提取LookupKey,尝试访问contact-ID,并将其他字段(原始ID,姓名等)与找到的联系人进行比较(如果有)似乎是正确的联系人,它将返回它.
如果未找到联系人ID,或者系统检测到它是错误的联系人,则会对所有联系人进行查询以找到正确的联系人(使用存储在该键上的辅助字段).
因此,LookupKey充当一种快速方法,可以返回联系人ID,或在发生不良情况时进行搜索.
总结以上是内存溢出为你收集整理的Android联系人:查找键如何工作?全部内容,希望文章能够帮你解决Android联系人:查找键如何工作?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)