【问题标题】:Android custom fields are not showing up in ContactsAndroid 自定义字段未显示在联系人中
【发布时间】:2015-04-27 06:14:26
【问题描述】:

我正在尝试使用为我的应用定义的 MIME 类型的自定义字段更新现有联系人。这被添加到联系人应用程序中可用的联系人,但在那里不可见。我不确定我错过了什么,如果您发现以下代码有任何问题,请提出建议 -

ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();

ContentProviderOperation.Builder builder = ContentProviderOperation
        .newInsert(RawContacts.CONTENT_URI);
builder.withValue(RawContacts.ACCOUNT_NAME, AccountGeneral.ACCOUNT_NAME);
builder.withValue(RawContacts.ACCOUNT_TYPE, AccountGeneral.ACCOUNT_TYPE);
operationList.add(builder.build());

operationList
        .add(ContentProviderOperation
                .newInsert(ContactsContract.Data.CONTENT_URI)
                .withValueBackReference(
                        ContactsContract.Data.RAW_CONTACT_ID, contactId)
                .withValue(
                        ContactsContract.Data.MIMETYPE,
                        ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
                .withValue(
                        ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
                        "Display Name")
                .build());

builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
// builder =
// ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,
        contactId);
builder.withValue(ContactsContract.Data.MIMETYPE, MIMETYPE);
builder.withValue(ContactsContract.Data.DATA1, contact.getId());
builder.withValue(ContactsContract.Data.DATA2, "Test Action");
builder.withValue(ContactsContract.Data.DATA3, "Test Action");
operationList.add(builder.build());

我正在使用在用于 SyncAdapter 的 contacts.xml 文件中定义的相同 MIME 类型。

请帮忙...

【问题讨论】:

  • 它们应该可见吗?或联系人应用程序只显示固定的模仿类型?
  • 这就是我要问的,如何显示自定义 mimetype 事件
  • 恕我直言,你不能,只有在你自己的应用程序中才能做到这一点
  • 也许我对类似问题的回答会对您有所帮助:stackoverflow.com/a/37514338/3793570

标签: android custom-fields


【解决方案1】:

你可以使用下面的sn-p来修改联系人:

 public void update()
{       
    int id = 1;
    String firstname = "Contact's first name";
    String lastname = "Last name";
    String number = "000 000 000";
    String photo_uri = "android.resource://com.my.package/drawable/default_photo";

    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

    // Name
    Builder builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI);
    builder.withSelection(ContactsContract.Data.CONTACT_ID + "=?" + " AND " + ContactsContract.Data.MIMETYPE + "=?", new String[]{String.valueOf(id), ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE});
    builder.withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, lastname);
    builder.withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, firstname);
    ops.add(builder.build());

    // Number
    builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI);
    builder.withSelection(ContactsContract.Data.CONTACT_ID + "=?" + " AND " + ContactsContract.Data.MIMETYPE + "=?"+ " AND " + ContactsContract.CommonDataKinds.Organization.TYPE + "=?", new String[]{String.valueOf(id), ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE, String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE_HOME)});
    builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, number);
    ops.add(builder.build());


    // Picture
    try
    {
        Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), Uri.parse(photo_uri));
        ByteArrayOutputStream image = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG , 100, image);

        builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI);
        builder.withSelection(ContactsContract.Data.CONTACT_ID + "=?" + " AND " + ContactsContract.Data.MIMETYPE + "=?", new String[]{String.valueOf(id), ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE});
        builder.withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, image.toByteArray());
        ops.add(builder.build());
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

    // Update
    try
    {
        getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

【讨论】:

  • 我正在尝试为诸如 builder.withValue(ContactsContract.Data.MIMETYPE, MIMETYPE); 之类的事件操作显示“自定义字段”; builder.withValue(ContactsContract.Data.DATA1, contact.getId()); builder.withValue(ContactsContract.Data.DATA2, "测试操作"); builder.withValue(ContactsContract.Data.DATA3, "测试操作");如何在通讯录应用中显示?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
相关资源
最近更新 更多