从 API 14(Android 4.0 及更高版本)开始,我可以使用ContactsContract.Profile.CONTENT_URI
获取手机所有者的联系人个人资料 Uri,并通过它获取他们的头像/联系人照片。
我想知道如何从 API 8(Android 2.2)到 API 13 做到这一点。我只需要照片(所以如果在 API 14 之前没有用户个人资料联系人的概念,那也没关系),虽然我是不能确定它实际上是可能的。
从 API 14(Android 4.0 及更高版本)开始,我可以使用ContactsContract.Profile.CONTENT_URI
获取手机所有者的联系人个人资料 Uri,并通过它获取他们的头像/联系人照片。
我想知道如何从 API 8(Android 2.2)到 API 13 做到这一点。我只需要照片(所以如果在 API 14 之前没有用户个人资料联系人的概念,那也没关系),虽然我是不能确定它实际上是可能的。
ContactsContract.Profile.CONTENT_URI
这意味着在 4.0 之前的设备上运行时,这不仅仅是寻找替代品的情况。您确实必须实施一种解决方法。
如果用户已将自己添加为联系人,则可以通过号码查找该联系人信息(包括他们的照片/头像),就像任何其他联系人一样。用户的电话号码可以从 SIM 中使用
((TelephonyManager)getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE)).getLine1Number();
获得号码后,您可以使用查询进行查找,例如
// Use PhoneLookup.PHOTO_URI from API 11 onwards for more direct lookup
final String[] proj = { PhoneLookup.DISPLAY_NAME,
PhoneLookup._ID,
PhoneLookup.PHOTO_ID };
Cursor c = cr.query(Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
Uri.encode(number)),
proj, null, null, PhoneLookup.DISPLAY_NAME);
在您移动光标并检索适当的PHOTO_ID
orPHOTO_URI
后,如果它存在,您可以像这样构建正确的 URI:
// I assume local variables long photoId or String photoUriString
Uri photoUri = ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI,
photoId);
// Just use Uri.parse(photoUriString); from API 11 onwards
但是,这种方法存在一些问题:
实现一种方式,让用户选择图像作为他们的个人资料照片/头像作为应用程序中的选项或设置。这是合理的直接实现,但如果用户想要在您的应用程序中添加头像,则会强制用户手动添加头像。
我不想重新发明轮子,所以这里是选择图像的一个很好的起点。您应该保存适当大小的图像版本,而不仅仅是用户选择返回的 URI,以防源图像被更改、移动或删除。
您可能希望在 API 14 及更高版本的设备中也允许此功能,因为它允许用户拥有特定于您的应用程序的不同头像。
何必?为什么不只是B?
考虑两者都做,因为一些 SIM 卡包含电话号码的用户可能已将自己添加为联系人(我相信 2.3 SMS 应用程序会尝试查找 SIM 号码),我相信他们会非常感激不必手动设置头像. 在可以自动完成的情况下让用户做额外的工作并不是一件好事。
我最初添加 A 只是为了获得我们正在测试的旧设备的一些功能,然后稍后又添加了 B。