从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之前没有用户个人资料联系人的概念,那么这是可以接受的),尽管我并不确定是否真的可能实现。
这意味着在运行于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
在您的应用程序中实现一种方式,让用户选择一张图片作为他们的个人资料照片/头像。这很容易实现,但是需要用户手动在您的应用程序中添加头像。
我不想重复造轮子,所以这里有一个从图库/SD卡中选择图像的好起点。您应该保存适当大小的图像版本,而不仅仅是用户选择返回的URI,以防源图像被更改、移动或删除。
您可能还希望允许API 14及以上设备使用此功能,因为它允许用户具有特定于您的应用程序的不同头像。
为什么要麻烦呢?为什么不只做B呢?
考虑同时进行A和B,因为一些将电话号码存储在SIM卡中的用户可能已将自己添加为联系人(我相信2.3 SMS应用程序尝试进行SIM号码查找),他们肯定会非常感激无需手动设置头像。让用户在可以自动完成的情况下做额外的工作并不是一件好事。
我最初添加了A,只是为了在我们测试的旧设备上获得一些功能,然后稍后又添加了B。