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)联系人照片

Android 联系信息,包括 facebook 等联系人

如何从电话簿中获取与 android 中特定联系人相关联的所有社交帐户?

如何获取/查询联系人的 Facebook 名称?

如何从电子邮件中获取 Facebook 个人资料图片?