Android - 获取联系人的 Facebook 图片
Posted
技术标签:
【中文标题】Android - 获取联系人的 Facebook 图片【英文标题】:Android - Get a contact's Facebook picture 【发布时间】:2014-01-19 23:24:59 【问题描述】:使用 android 平台非常有趣,尤其是在解决问题时。事实上,互联网上可能有关于 Android 开发的所有信息。
好的,我已经搜索了大约一个星期,但没有找到任何离工作很近的东西。让我们深入了解它。
我们正在构建一个 Android 应用程序,该应用程序需要对设备上的现有联系人具有读/写权限。使用这种方法阅读联系人的照片变得非常容易:
// Returns a stream reading a contact thumbnail
public InputStream getContactThumbnail(int id)
// Stream reading contact image
InputStream stream = ContactsContract.Contacts.openContactPhotoInputStream(
context.getContentResolver(),
ContentUris.withAppendedId(
ContactsContract.Contacts.CONTENT_URI, id
)
);
// If image is null, try to read Facebook image
if (stream == null)
stream = new ByteArrayInputStream(getFacebookPhoto(id));
return stream;
现在,前面的方法接收一个 id 作为参数并返回一个 Stream,从而可以读取联系人的缩略图。 必须是流,因为手机就像一个网络服务器,有多个线程在运行。如果在同一时间间隔内多次请求缩略图,则肯定会抛出 OutOfMemoryException。
我需要正确实现 getFacebookPhoto(int) 方法,以便它返回读取联系人的 Facebook 个人资料图片的任何流,该联系人的联系人与其各自的 Facebook 个人资料相关联。我已经尝试过很多次,但都失败了。
假设 #1
如果联系人与 Facebook 个人资料相关联,则必须将 Facebook ID 保存在某处。如果可以访问此信息,则可以轻松使用图形获取 Facebook 个人资料图片。问题是这样做需要互联网连接。
假设 #2
Facebook 缩略图保存在 SD 卡的某个位置。也许联系人和那些可以通过 SQLite 请求找到的文件之间存在链接?
假设 #3
叹息,我看起来很绝望。好吧,如果我理解正确的话,电话联系人和 Facebook 联系人在数据库中并不是一回事。如果您从以下 URI 查询所有联系人: *ContactsContract.Contacts.CONTENT_URI* 您只会获得您创建的联系人,而不会获得有关 Facebook 链接的信息。有没有办法找到所有链接的联系人并获取他们各自的照片?
结论
是的,差不多就是这样。综上所述,我需要阅读所有联系人信息。对于每个联系人,我必须找到它的照片。如果用户没有为链接到 Facebook 个人资料的联系人设置图片,则也必须读取链接的个人资料图片。
到目前为止,*** 社区提供了很大帮助,无数次挽救了我的生命和工作。有可能,我在其他应用程序中看到过。
感谢您抽出宝贵的时间,真的很感激。
编辑
我们不要放弃!我会尽快开始100pts 赏金。
【问题讨论】:
【参考方案1】:你的假设在一定程度上是正确的。在联系人应用程序中,这些事情按以下方式处理 -
设备的联系人及其 Facebook 帐户由联系人的 _ID
和 Facebook 的 id
映射,这是一对一的映射。所以首先从这个映射中你必须找出 Facebook id
的conserved 接触。但是,此信息存储在哪个表中以及该表是否向您提供,URL
到该表完全取决于供应商。
从 Facebook Id 我们可以从 Facebook 的服务器或媒体数据库中获取相应的个人资料图片,如果它也被缓存的话。
但这并不是所有 OEM 都支持的。并且实施因 OEM 而异,因为 Google 不强制执行任何通用标准实施。 因此,无法保证单一实现适用于来自不同 OEM 的所有设备。
【讨论】:
离希望现有的解决方案又近了一步。我越深入,就越觉得这个算法可能没有完美的算法......我会检查是否有可能的方法来获取联系人的 Facebook id。【参考方案2】:你真的应该去 Facebook 开发者网站上玩一下 Graph Explorer,它会帮助你弄清楚你需要做什么来获得某些东西。为了获取一个人的图片,您只需使用 /ID?fields=picture 的图形路径(其中 ID 是联系人的 facebook id)执行一个简单的 GET HTTPRequest,这将返回一个 JSON 对象,其中包含该人的个人资料图片的链接。从那里获取图像应该相当简单。
您也可以通过向 /me/friends?fields=picture 发送 GET 请求来获取一个人的所有朋友的图片信息。似乎您正试图避免网络连接,但如果 android 联系人不存储 facebook id,那么恐怕您将不得不自己获取 id。
希望对您有所帮助。
【讨论】:
感谢您的提示,我实际上正在寻找一种在设备上查找联系人 Facebook ID 的方法。一旦我找到了这样做的方法,Graph 可能就是解决方案。问题是我下载了一个没有互联网连接的应用程序——所以我知道这是可能的,只需要找出方法。 运气好吗?我正在尝试用 Facebook 个人资料图片填充徽章【参考方案3】:你为什么不使用 FQL,Android 你可以使用 -
String query = "SELECT uid, name, pic, pic_small, pic_big FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())";
Bundle params = new Bundle();
params.putString("method", "fql.query");
params.putString("query", query);
mAsyncFacebookRunner.request(null, params, new CustomRequestListener());
CustomRequestListener() 在 Facebook Android SDK 中扩展 RequestListener。
【讨论】:
我认为他正在尝试检索已存储在设备上的联系人照片,而无需连接到 Internet。 就像@Tenfour04 所说,我需要找到一种方法来查找与 Facebook 联系人相关联的用户创建的联系人之间的链接在哪里。我不明白你为什么投了反对票。以上是关于Android - 获取联系人的 Facebook 图片的主要内容,如果未能解决你的问题,请参考以下文章
获取与 facebook for android 同步的联系人照片
android 上的外部(例如 facebook)联系人照片