2015-04-27 1 views
0

Я пытаюсь обновить существующий контакт с настраиваемыми полями типа MIME, определенными для моего приложения. Это добавляется к контакту, доступному в приложении «Контакты», но там не видно. Я не уверен, что мне не хватает, пожалуйста, предлагаю, если вы нашли ничего плохого с кодом ниже -Пользовательские поля Android не отображаются в контактах

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()); 

Я использую тот же тип MIME, определенный в файле contacts.xml, который используется для SyncAdapter.

Пожалуйста, помогите ...

+0

они должны быть видны? или приложение-приложение показывает только фиксированные типы mimetypes? – pskink

+0

Вот что я спрашиваю, как показать пользовательские события mimetype – Manish

+0

imho вы не можете, только в своем собственном приложении вы можете это сделать – pskink

ответ

0

Вы можете использовать ниже фрагмент кода, чтобы изменить контакт:

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(); 
    } 
} 
+0

Я пытаюсь показать «Пользовательские поля» для действия события, такого как 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"); Как показать это в приложении для контактов? – Manish