访问原始联系人数据

Posted

技术标签:

【中文标题】访问原始联系人数据【英文标题】:Access raw contact data 【发布时间】:2012-05-21 04:35:47 【问题描述】:

我向我创建的帐户添加了一些原始联系人。 有谁知道我如何访问它的数据字段?

这是我添加联系人的方式:

        Log.i(TAG, "Adding contact: " + username);
    ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();

    // create the contact
    ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
    builder.withValue(RawContacts.ACCOUNT_NAME, account.name);
    builder.withValue(RawContacts.ACCOUNT_TYPE, account.type);
    builder.withValue(RawContacts.SYNC1, username);
    operationList.add(builder.build());

    // set display name
    builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
    builder.withValueBackReference(ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID, 0);
    builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
    builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name);
    operationList.add(builder.build());

    // set profile data
    builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
    builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0);
    builder.withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/vnd.net.myapp.android.profile");
    builder.withValue(ContactsContract.Data.DATA1, username);
    builder.withValue(ContactsContract.Data.DATA2, context.getString(R.string.app_name) + " Profile");
    builder.withValue(ContactsContract.Data.DATA3, "View profile");
    operationList.add(builder.build());

我用来获取联系人的光标是:

    private Cursor getContactsCursor(CharSequence constraint) 
    Uri uri = RawContacts.CONTENT_URI.buildUpon().appendQueryParameter(RawContacts.ACCOUNT_NAME, getString(R.string.app_name)).appendQueryParameter(RawContacts.ACCOUNT_TYPE, getString(R.string.ACCOUNT_TYPE)).build();
    String[] projection = null;//new String[]  ContactsContract.Contacts.DISPLAY_NAME ;
    String selection = null;
    if (constraint != null && constraint.length() > 0)
        selection = ContactsContract.Contacts.DISPLAY_NAME + " LIKE '%" + constraint + "%'" ;
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
    Cursor cursor = getContentResolver().query(uri, projection, selection, null , sortOrder);
    return cursor;

不幸的是,我需要 Data1 字段,它不是游标列之一。 我想问题出在 RawContacts.CONTENT_URI Uri 上。 我应该改用什么?

【问题讨论】:

Have you tried this 【参考方案1】:

看看http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html 请注意那里建议的最后一个代码和平 - “读取原始联系人以及所有相关数据的最佳方式......”

【讨论】:

以上是关于访问原始联系人数据的主要内容,如果未能解决你的问题,请参考以下文章

合并原始联系人

Android 原始联系人行应创建自己的专属聚合联系人行

根据电话号码添加原始联系人时联系人重复

当您需要向联系人添加自定义信息时,如何选择要更新的原始联系人?

如何获取具有特定 LOOKUP_KEY 的联系人的所有原始联系人?

使用 Android 联系人应用程序编辑由自定义 ContentProvider 添加的原始联系人