【发布时间】:2017-07-09 05:56:43
【问题描述】:
除了联系人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。
那么他们是怎么做到的呢?
【问题讨论】: