使用API 8或更高版本获取用户/所有者个人资料联系URI和用户图像。

3

从API 14(Android 4.0及以上版本)开始,我可以使用ContactsContract.Profile.CONTENT_URI来获取手机所有者的联系人资料URI,并通过此方式获取他们的头像/联系人照片。

我想知道如何在API 8(Android 2.2)到API 13之间实现这一点。我只需要照片(因此如果在API 14之前没有用户个人资料联系人的概念,那么这是可以接受的),尽管我并不确定是否真的可能实现。


我没有之前的API 15手机进行测试,但是在API 8-13中是否有用户照片这样的概念? - harism
我不是100%确定 - 这可能是特定于手机的。 http://android.stackexchange.com/questions/5454/how-to-show-own-photo-in-sms-conversation/31972#31972 - Iskar Jarak
2.2 版本的模拟器似乎完全没有用户照片的概念。 - Iskar Jarak
@iskarjarak 你找到任何解决方案了吗?!我也面临着同样的问题! - Sadegh
@sirlate 我已经将我最终的做法添加为答案。希望能对你有所帮助。 - Iskar Jarak
1个回答

6

在API 14之前,没有用户配置文件的概念。

这意味着在运行于4.0版本以下设备时,不仅仅是找到替代ContactsContract.Profile.CONTENT_URI的方法。您真的需要实现一个解决方案。

较差的解决方案(A):使用SIM卡电话号码

如果用户将自己添加为联系人,则可以像查找其他联系人一样查找该联系人信息(包括其照片/头像)。可以使用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_IDPHOTO_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     

然而,这种方法存在一些问题:
  • 并非所有运营商都将电话号码存储在SIM卡中。
  • 并非所有手机都可以写入SIM卡的该部分。
  • 并非所有写入该部分的手机都以Android可用的格式进行。

稍微好一点的解决方案(B):在应用程序中添加用户头像选项

在您的应用程序中实现一种方式,让用户选择一张图片作为他们的个人资料照片/头像。这很容易实现,但是需要用户手动在您的应用程序中添加头像

我不想重复造轮子,所以这里有一个从图库/SD卡中选择图像的好起点。您应该保存适当大小的图像版本,而不仅仅是用户选择返回的URI,以防源图像被更改、移动或删除。

您可能还希望允许API 14及以上设备使用此功能,因为它允许用户具有特定于您的应用程序的不同头像。

替代解决方案(C):A和B

为什么要麻烦呢?为什么不只做B呢?

考虑同时进行A和B,因为一些将电话号码存储在SIM卡中的用户可能已将自己添加为联系人(我相信2.3 SMS应用程序尝试进行SIM号码查找),他们肯定会非常感激无需手动设置头像。让用户在可以自动完成的情况下做额外的工作并不是一件好事。


我最初添加了A,只是为了在我们测试的旧设备上获得一些功能,然后稍后又添加了B。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接