如何从手机电话簿中获取特定联系人关联的所有社交账户?涉及IT技术。

7

我从手机通讯录中获取了所有设备联系人,现在我想要从被获取的通讯录联系人中获取链接账户(Facebook、Twitter、Instagram、LinkedIn)的URL。我应该怎么做?

以下是获取联系人的代码:

public Cursor getContactsCursor(FragmentActivity activity) {
        Cursor cursor = null;
        try {
            String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + "= 0" + " OR " + ContactsContract.Contacts.IN_VISIBLE_GROUP + "= 1";
            String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
            ContentResolver cr = activity.getContentResolver();
            return cr.query(ContactsContract.Contacts.CONTENT_URI, null, selection, null, sortOrder);
        } catch (Exception e) {
            AppLogger.e(Helper.class.getSimpleName(), e.getMessage());
            return cursor;
        }
    }

现在我不知道如何获取与特定联系人相关联的帐户(如 Facebook、LinkedIn 等)。

请问有人可以指导我吗?

更新: 在以下附加图像中,点击红色部分会在浏览器中打开 LinkedIn 用户个人资料页面。因此,我想获取用于打开用户个人资料页面的字段。

enter image description here

提前致谢。


你是在询问如何在那些服务上查找联系人吗?所以,发送电子邮件给Twitter来查看用户名? - Terence Eden
不,我正在从电话簿中获取联系人。现在我想要与这些联系人相关联的帐户。(例如 LinkedIn、Facebook、Instagram、Twitter)。 - Grishma Ukani
请解释一下“链接账户URL”的确切含义,您能否在联系人应用程序中发布要查询的信息截图? - marmor
当然可以。如果联系人应用程序中连接到该联系人的任何社交媒体公共个人资料链接(例如LinkedIn、Facebook、Twitter、Instagram),则意味着已经将联系人与社交媒体帐户关联起来。关联的联系人指的是只有一个联系人,如果他/她的电话号码与社交媒体上的相同,并且从那里同步了联系人,则在联系人应用程序中,用户的联系人将显示为关联联系人。 - Grishma Ukani
@marmor 你好,我已经更新问题,并附上了我要查询的信息的截图。 - Grishma Ukani
1个回答

4

您需要确定您感兴趣的所有帐户的确切,例如,Google+的为:vnd.android.cursor.item/vnd.googleplus.profile

您可以转储联系人的所有,并手动确定您所需的内容:

// make sure you import Data from: ContactsContract.Data
String[] projection = new String[] { Data.MIMETYPE };
String selection = Data.CONTACT_ID + " = '"+ contactId + "'";
Cursor cursor = getContentResolver().query(Data.CONTENT_URI, projection, selection, null, null);
DatabaseUtils.dumpCursor(cursor);
cursor.close();

一旦您有了想要的固定的MIMETYPE列表,您可以查询其中特定联系人的信息:

// Add more
String[] mimetypes = new String[] { 
    "vnd.android.cursor.item/vnd.googleplus.profile",
    "vnd.android.cursor.item/vnd.com.whatsapp.profile" 
};

// Usually the interesting info is on the first few fields, modify this if needed
String[] projection = new String[] { Data.DATA1, Data.DATA2, Data.DATA3, Data.DATA4 };
String selection = Data.CONTACT_ID + " = '"+ contactId + "' AND " + Data.MIMETYPE + " IN (?,?)";

Cursor cursor = getContentResolver().query(Data.CONTENT_URI, projection, selection, mimetypes, null);
DatabaseUtils.dumpCursor(cursor);
cursor.close();

更新:

在Linkedin的情况下,Mimetype确实是: vnd.android.cursor.item/vnd.com.linkedin.android.profile。 关于您关于没有个人资料网址的评论,在Data1中,您应该有一些长ID,如AC...UQ4(约40个字符)。

然后你的网址是: https://www.linkedin.com/profile/view?id=<data1Id> 例如: https://www.linkedin.com/profile/view?id=AC...UQ4


我使用了这段代码并成功获取了所有领英联系人的信息,但是这段代码无法获取与之连接的个人资料网址。 对于领英而言,MIME类型为: “vnd.android.cursor.item/vnd.com.linkedin.android.profile” 非常感谢您的回答。 我能够获取红框中突出显示的字段,但无法获取个人资料网址。 - Grishma Ukani
是的,你说得对。Facebook不允许用户将联系人同步到联系人应用程序中。所以我认为Instagram也不允许用户将联系人同步,因为Instagram也属于Facebook。但是Twitter怎么样?你有什么想法吗? - Grishma Ukani
你知道 Twitter 的公开个人资料链接是什么吗? - Grishma Ukani
@marmor 我也遇到了同样的问题,无法区分WhatsApp、Duo等应用程序的MIMETYPE。当我查询ContactsContract.Data表时,我发现WhatsApp的联系人在DATA3列中有Message xxxVideo call xxxVoice call xxx,而Duo则在DATA5列中找到相同的内容。我们如何知道哪个列包含这些值?对于Duo,DATA1..DATA4列填充了其他数据,而对于WhatsApp,DATA1..DATA2列填充了其他内容。 - Karthik
你如何获取此联系人ID?我认为每个应用程序都会复制联系人,然后链接它们,这就是我认为它们具有不同联系人ID的原因。 - Chagai Friedlander
显示剩余3条评论

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