不属于 发表于 2015-8-16 14:40:10

检索所有联系人的名字和他们的默认的电话号码的代码

这个代码片段检索所有联系人显示每个联系人的姓名和电话号码,如果它被定义的。 如果定义了多个电话号码联系,只有默认了。 需要设置在tizen-manifest设置。 xml文件:http://tizen.org/privilege/contact.read
//    PRIVILEGE NEEDED to be set in tizen-manifest.xml file:
//    http://tizen.org/privilege/contact.read

#include <contacts.h>
#include <stdlib.h>
#include <dlog.h> // for logging purposes

contacts_list_h contacts_list;
int err = CONTACTS_ERROR_NONE;

if (contacts_connect() == CONTACTS_ERROR_NONE)
{
    if (contacts_db_get_all_records(_contacts_contact._uri, 0, 0, &contacts_list) == CONTACTS_ERROR_NONE)
    {
      LOGI ("Listing contacts...");
      contacts_record_h contact;
      while (contacts_list_get_current_record_p(contacts_list, &contact) == CONTACTS_ERROR_NONE)
      {
            // Contact found.
            bool is_phone_number = false;
            char *contact_name = NULL, *contact_number = NULL;
            err = contacts_record_get_str(contact, _contacts_contact.display_name, &contact_name);
            if (err != CONTACTS_ERROR_NONE)
            {
                LOGE ("Error occurred when trying to get contact's display name! Error code: %d", err);
                contact_name = strdup("Not defined");
            }
            // Notice that if you use the default Contacts app
            // to add a contact without a name and only with phone number,
            // the display name retrieved will be the phone number itself.

            contacts_record_h child_record_phone;
            int child_records_count = 0;

            err = contacts_record_get_child_record_count(contact, _contacts_contact.number, &child_records_count);
            if (err == CONTACTS_ERROR_NONE)
            {
                if (child_records_count == 1) // Only one number found
                {
                  err = contacts_record_get_child_record_at_p(contact, _contacts_contact.number, 0, &child_record_phone);
                  if (err == CONTACTS_ERROR_NONE)
                  {
                        err = contacts_record_get_str(child_record_phone, _contacts_number.number, &contact_number);
                        if (err == CONTACTS_ERROR_NONE)
                        {
                            // Successfully retrieved the phone number
                            // so we set the bool to know that we don't need a placeholder.
                            is_phone_number = true;
                        }
                        else
                        {
                            LOGE ("Error occurred when getting the phone number! Error code: %d", err);
                        }
                  }
                  else
                  {
                        LOGE ("Error occurred when getting the phone number record! Error code: %d", err);
                  }
                }
                else if (child_records_count > 1) // If there is more than one phone number we will display only the default one.
                {
                  int i;
                  for (i = 0; i < child_records_count; i++)
                  {
                        err = contacts_record_get_child_record_at_p(contact, _contacts_contact.number, i, &child_record_phone);
                        if (err == CONTACTS_ERROR_NONE)
                        {
                            bool is_default = false;
                            err = contacts_record_get_bool(child_record_phone, _contacts_number.is_default, &is_default);
                            if (err == CONTACTS_ERROR_NONE)
                            {
                              if (is_default == false)
                              {
                                    LOGI ("Many numbers were defined for this contact and this is not a default one. We ignore this number.");
                              }
                              else
                              {
                                    //Default phone number found
                                    err = contacts_record_get_str(child_record_phone, _contacts_number.number, &contact_number);
                                    if (err == CONTACTS_ERROR_NONE)
                                    {
                                        // Successfully retrieved the phone number
                                        // so we set the bool to know that we don't need a placeholder.
                                        is_phone_number = true;
                                        break; //We have found a default number, we can finish browsing.
                                    }
                                    else
                                    {
                                        LOGE ("Error occurred when getting the phone number! Error code: %d", err);
                                    }
                              }
                            }
                            else
                            {
                              LOGE ("Error occurred when getting the 'is default' attribute! Error code: %d", err);
                            }
                        }
                        else
                        {
                            LOGE ("Error occurred when getting the phone number record! Error code: %d", err);
                        }
                  }
                }
                else
                {
                  // No phone numbers were found for the specified contact.
                  // This can happen for all contacts where no phone number was defined.
                  // You can do something specific to the no-phone contacts, for example filter them.
                  // In this snippet we have already set the bool is_phone_number to false by default,
                  // so we do nothing here.
                }
            }
            else
            {
                LOGE ("Error occurred when getting the count of phone numbers! Error code: %d", err);
            }
            if(is_phone_number == false)
            {
                // we set the placeholder in place of the phone number.
                contact_number = strdup("Not defined");
            }

            // Here you can make use of the retrieved contact name and phone number.
            // In this snippet it's only printed as a log:
            LOGI("Contact name: %s,\t Phone number: %s", contact_name, contact_number);

            free(contact_name);
            free(contact_number);

            contacts_list_next(contacts_list); // proceed to next contact on a list
      }
      LOGI ("Listing contacts completed!");

      contacts_list_destroy(contacts_list, true);
    }
    else
    {
      LOGE ("Error occurred when getting the contact list! Error code: %d", err);
    }

    if (contacts_disconnect() != CONTACTS_ERROR_NONE)
    {
      LOGE ("Error occurred when disconnecting from contacts service!");
    }
}
else
{
    LOGE ("Error occurred when connecting to contacts service! Error code: %d", err);
}
页: [1]
查看完整版本: 检索所有联系人的名字和他们的默认的电话号码的代码