4

連絡先のリストと、名前などの基本情報を取得できます。電話、電子メール、IM、メモ、バックアップ目的の組織ContactsContract.Contacts.CONTENT_URI。さまざまな情報タイプの連絡先およびその他の特定のURIのリストに使用します。

すべての情報を完全に復元するには、さらに2つのフィールドが必要です。

ContactsContract.RawContacts.ACCOUNT_TYPE

ContactsContract.RawContacts.ACCOUNT_NAME

誰かがContactsContract.Contacts.CONTENT_URIから連絡先IDを知っているので、この情報を取得する方法を教えてもらえますか?

ありがとうございました

4

2 に答える 2

13
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);
    }
于 2011-08-16T17:10:36.597 に答える
0

上記の回答は、contactID列を使用してアカウント情報を探している場合に最適です。ただし、多くの場合、情報はrawContactIDを使用して保存されます。したがって、raw-contact-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);
}
于 2019-09-01T12:18:07.543 に答える