0

我已经为 ContactsContract 创建了一个应用程序......我创建了一个微调器,它可以配置所有帐户,因此用户可以选择联系人类型,比如 gmail(com.google)、phoneBook 等等......

现在,如果我选择电话簿,那么联系人就会完美地添加到电话簿中。当我选择 gmail 选项时,它在我的 htc 手机上完美运行...联系人被添加,同步后,我也可以在我的 gmail 帐户中看到它。

但是,当我在任何三星手机上测试时,同样的事情,它并没有被添加到我的 gmail 的联系人中......

我很困惑...

任何帮助表示赞赏。提前致谢...

4

1 回答 1

0

电话号码存储在自己的表中,需要单独查询。要查询电话号码表,请使用存储在 SDK 变量 ContactsContract.CommonDataKinds.Phone.CONTENT_URI 中的 URI。使用 WHERE 条件获取指定联系人的电话号码。

if (Integer.parseInt(cur.getString(
       cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
    Cursor pCur = cr.query(
    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
    null, 
    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
    new String[]{id}, null);
    while (pCur.moveToNext()) {
    // Do something with phones
    } 
    pCur.close();
}

对 Android 联系人 SQLite 数据库执行第二次查询。根据存储在 ContactsContract.CommonDataKinds.Phone.CONTENT_URI 中的 URI 查询电话号码。联系人 ID 作为 ContactsContract.CommonDataKinds.Phone.CONTACT_ID 存储在电话表中,并且 WHERE 子句用于限制返回的数据。

电子邮件地址

查询电子邮件地址类似于电话号码。必须执行查询才能从数据库中获取电子邮件地址。查询存储在 ContactsContract.CommonDataKinds.Email.CONTENT_URI 中的 URI 以查询电子邮件地址表。

Cursor emailCur = cr.query( 
        ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
        null,
        ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
        new String[]{id}, null); 
    while (emailCur.moveToNext()) { 
        // This would allow you get several email addresses
            // if the email addresses were stored in an array
        String email = emailCur.getString(
                      emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
        String emailType = emailCur.getString(
                      emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); 
    } 
    emailCur.close();
于 2012-04-04T10:34:00.320 回答