从API 14(Android 4.0以后)开始,我可以使用ContactsContract.Profile.CONTENT_URI
获取手机用户的联系人资料Uri,并通过它获取他们的头像/联系人照片。
我想知道如何从API 8(Android 2.2)到API 13执行此操作。我只需需要照片(因此,如果没有用户配置文件联系人的概念,则可以到API 14),虽然我不确定它实际上是否可能。
答案 0 :(得分:6)
这意味着它不仅仅是在4.0之前的设备上运行时找到替换ContactsContract.Profile.CONTENT_URI
的替代方案的情况。你真的必须实施一种解决方法。
如果用户已将自己添加为联系人,则可以按号码查找该联系人信息(包括他们的照片/头像),就像任何其他联系人一样。可以使用
从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
或PHOTO_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
然而,此方法存在一些问题:
为用户实施一种方式,选择图像作为其个人资料照片/头像,作为应用程序中的选项或设置。这是合理的直接实现,但强制用户手动添加头像,如果他们想在您的应用程序中使用。
我不想重新发明轮子,所以这里是good starting point for selecting an image。您应该保存适当大小的图像版本,而不仅仅是用户选择返回的URI,以防更改,移动或删除源图像。
您可能希望在API 14及更高版本的设备中同时使用此功能,因为它允许用户拥有特定于您的应用程序的不同头像。
为什么要这么麻烦?为什么不只是B?
考虑两者兼顾,因为某些SIM卡包含其电话号码的用户可能已将自己添加为联系人(我相信2.3 SMS应用程序尝试查找SIM号码),我相信他们会非常感谢他们不必手动设置一个头像。让用户自动完成额外的工作并不是一件好事。
我最初添加A只是为了测试我们正在测试的旧设备的部分功能,然后稍后添加B.