其他分享
首页 > 其他分享> > android – 从API 8开始获取用户/所有者配置文件联系人URI和用户图像

android – 从API 8开始获取用户/所有者配置文件联系人URI和用户图像

作者:互联网

从API 14(Android 4.0以后)开始,我可以使用ContactsContract.Profile.CONTENT_URI获取手机所有者的联系人资料Uri,并通过它获取他们的头像/联系人照片.

我想知道如何从API 8(Android 2.2)到API 13.我只需要照片(所以如果在API 14之前没有用户配置文件联系人的概念就可以了),尽管我是不能确定它实际上是可能的.

解决方法:

在API 14之前,API 14之前没有用户简档的概念.

这意味着它不仅仅是在pre 4.0设备上运行时找到替换ContactsContract.Profile.CONTENT_URI的替代方案.你真的必须实现一个解决方法.

解决方案不佳(A):使用SIM电话号码

如果用户已将自己添加为联系人,则可以按号码查找该联系人信息(包括他们的照片/头像),就像任何其他联系人一样.可以使用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_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     

但是,此方法存在一些问题:

>并非所有操作符都将电话号码存储在他们的SIM卡中.
>并非所有手机都可以写入SIM的该部分.
>并非所有写入该部分的手机都会以Android可用的格式进行.

稍微更好的解决方案(B):为您的应用程序添加用户头像选项

为用户实施一种方式,选择图像作为其个人资料照片/头像,作为应用程序中的选项或设置.这是合理的直接实施,但强制用户手动添加头像,如果他们想要你的应用程序.

我不想重新发明轮子,所以这里是good starting point for selecting an image.你应该保存一个适当大小的图像版本,而不仅仅是用户选择返回的URI,以防更改,移动或删除源图像.

您可能希望在API 14及更高版本的设备中同时使用此功能,因为它允许用户拥有特定于您的应用程序的不同头像.

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

何必?为什么不只是B?

考虑两者兼顾,因为一些SIM卡包含其电话号码的用户可能已将自己添加为联系人(我相信2.3 SMS应用程序会尝试查找SIM号码),我相信他们会非常欣赏不必手动设置头像.让用户自动完成额外的工作并不是一件好事.

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

标签:android,uri,contacts,contactscontract
来源: https://codeday.me/bug/20190825/1722363.html