2015-02-25 3 views
1

Я хотел бы сохранить и синхронизировать контакты с телефоном Контакты. Сохраненные контакты из моего приложения должны появляться под некоторым синхронизатором. Если приложение удалено, все эти контакты должны быть удалены.Android обеспечивает/синхронизирует контакты из приложения

После прочтения документации на Android я создал SyncAdapter и ContentProvider. Единственное, что сейчас делают эти два, это создать учетную запись. Мой ContentProvider еще не фиктивный.

Android contact accounts

Первое, что я хотел бы сделать, это вручную сохраняя контакт с помощью своей собственной учетной записи синхронизации. Следующий код, который я нашел в SO, создает только телефонный контакт без ссылки на мою учетную запись синхронизации.

public static boolean insertContact(ContentResolver contactAdder, 
     String firstName, String mobileNumber) { 
    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
    ops.add(ContentProviderOperation 
      .newInsert(ContactsContract.RawContacts.CONTENT_URI) 
      .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) 
      .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) 
      .build()); 
    ops.add(ContentProviderOperation 
      .newInsert(ContactsContract.Data.CONTENT_URI) 
      .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
      .withValue(
        ContactsContract.Data.MIMETYPE, 
        ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 
      .withValue(
        ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, 
        firstName).build()); 
    ops.add(ContentProviderOperation 
      .newInsert(ContactsContract.Data.CONTENT_URI) 
      .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
      .withValue(
        ContactsContract.Data.MIMETYPE, 
        ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) 
      .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, 
        mobileNumber) 
      .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, 
        Phone.TYPE_MOBILE).build()); 

    try { 
      contactAdder.applyBatch(ContactsContract.AUTHORITY, ops); 
    } catch (Exception e) { 
     return false; 
    } 

    return true; 
} 

Как я могу сохранить контакт из моего приложения под моим собственным syncaccount, так что вы можете видеть мое приложение логотип в списке контактов?

Сложно найти информацию об этом в Интернете. Большинство изменений касаются обмена/изменения существующих контактов.

+0

Здравствуйте, как вы создаете своего поставщика контента и связываете его с контактами? –

+0

Вы должны сохранить свой контакт, предоставив ACCOUNT_TYPE и ACCOUNT_NAME. Взгляните на ответ. – com2ghz

+0

Да, но вы должны объявить провайдера в своем манифесте, нет? просто настройка типа строки сделает трюк? Я попробую сегодня вечером –

ответ

0

Мне удалось сохранить контакт по моей учетной записи синхронизации!

Я был так близко. Именно это давало тип учетной записи и имя при вставке:

ops.add(ContentProviderOperation 
      .newInsert(ContactsContract.RawContacts.CONTENT_URI) 
      .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, MY_ACCOUNT_TYPE) 
      .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, MY_ACCOUNT_NAME) 
      .build()); 
Смежные вопросы