【问题标题】:Query Android contact to get ACCOUNT_TYPE and ACCOUNT_NAME查询 Android 联系人以获取 ACCOUNT_TYPE 和 ACCOUNT_NAME
【发布时间】:2011-10-28 01:16:09
【问题描述】:

我可以获得联系人列表及其基本信息,例如:姓名。用于备份目的的电话、电子邮件、即时消息、便笺、组织,请使用 ContactsContract.Contacts.CONTENT_URI 获取联系人列表和其他特定 URI 以用于不同的信息类型。

为了完全恢复所有信息,我需要另外两个字段:

ContactsContract.RawContacts.ACCOUNT_TYPE

ContactsContract.RawContacts.ACCOUNT_NAME

如果知道 ContactsContract.Contacts.CONTENT_URI 中的联系人 ID,谁能指导我如何获取此信息?

谢谢

【问题讨论】:

    标签: android android-contacts contactscontract rawcontacts


    【解决方案1】:
    public ContactAccount getContactAccount(Long id,ContentResolver contentResolver) {
    
            ContactAccount account = null;
    
            Cursor cursor = null;
            try {
    
                 cursor = contentResolver.query(ContactsContract.RawContacts.CONTENT_URI,
                         new String[]{ContactsContract.RawContacts.ACCOUNT_NAME, ContactsContract.RawContacts.ACCOUNT_TYPE},
                         ContactsContract.RawContacts.CONTACT_ID +"=?",
                         new String[]{String.valueOf(id)},
                         null);
    
                if (cursor != null && cursor.getCount() >0)
                {
                    cursor.moveToFirst();
                    account = new ContactAccount();
                    account.setAccountName(cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_NAME)));
                    account.setAccountType(cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE)));
                    cursor.close();
                }
            } catch (Exception e) {
                Utils.log(this.getClass().getName(), e.getMessage()); 
            } finally{
              cursor.close();
            }
    
            return(account);
        }
    

    【讨论】:

      【解决方案2】:

      如果您正在使用contactID 列查找帐户信息,上述答案是完美的。但是,通常使用 rawContactID 存储信息。因此,如果您想访问原始联系人 ID 的帐户信息,则可以使用下面的此方法。 主要区别在于我使用的是 rawContacts 表中的 _ID 列。这映射到您将在其他表中看到的 rawContactID

      public int   updateAccountInfoForContactData(String rawContactID) {
          int    accountPos    = 0;
      
          Cursor cursor        = null;
          String accountName   = null;
          String accountType   = null;
          Uri rawContactUri      = ContactsContract.RawContacts.CONTENT_URI;
          String[] syncColumns   = new String[] {
                                                  ContactsContract.RawContacts.ACCOUNT_NAME,
                                                  ContactsContract.RawContacts.ACCOUNT_TYPE,
                                          };
          String   whereClause   = ContactsContract.RawContacts._ID +"=?";
          String[] whereParams   = new String[]{String.valueOf(rawContactID)};
          //Uri rawContactUri = ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI, longContactID);
          try {
              cursor = mContext.getContentResolver().query(
                      rawContactUri,
                      syncColumns,
                      whereClause,
                      whereParams,
                      null);
      
              if (cursor != null && cursor.getCount() >0)
              {
                  cursor.moveToFirst();
                  if(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_NAME) >= 0) {
                      accountName = cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_NAME));
                  }
                  if(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE) >= 0) {
                      accountType = cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE));
                  }
                  cursor.close();
                  cursor = null;
      
              }
          } catch (Exception e) {
              Log.d(TAG, "getting account info failed");
          } finally{
              if(cursor != null) {
                  cursor.close();
              }
              cursor = null;
          }
      
          return(accountPos);
      }
      

      【讨论】:

        猜你喜欢
        • 2012-10-06
        • 1970-01-01
        • 1970-01-01
        • 2011-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-11
        • 2013-12-16
        相关资源
        最近更新 更多