2015-11-20 4 views
3

В моем приложении мне нужно добавить контакт в учетную запись google по умолчанию и синхронизировать ее.Android - связь с синхронизацией добавляется программно в учетную запись google

Вот мой код:

public static void addContact(Context context, String DisplayName,String WorkNumber, String MobileNumber, String emailID, 
            String jobTitle, String company, String address){ 


    ArrayList <ContentProviderOperation> ops = new ArrayList <ContentProviderOperation>(); 
    String account = getUsernameLong(context); 

    ops.add(ContentProviderOperation.newInsert(
      ContactsContract.RawContacts.CONTENT_URI) 
      .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, "com.google") 
      .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, account) 

      .build()); 

    //------------------------------------------------------ Names 
    if (DisplayName != null) { 
     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.DISPLAY_NAME, 
         DisplayName).build()); 
    } 

    .................. 

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

       try { 
        //Toast.makeText(context, "Exception: " + e.getMessage(), Toast.LENGTH_SHORT).show(); 
       } catch (Exception e1) { 

       } 
    } 


} 

Здесь функционируют getUsernameLong(), что возвращение учетной записи Google

public static String getUsernameLong(Context context) { 
       AccountManager manager = AccountManager.get(context); 
       Account[] accounts = manager.getAccountsByType("com.google"); 
       List<String> possibleEmails = new LinkedList<String>(); 

       for (Account account : accounts) { 

        // account.name as an email address only for certain account.type values. 
        possibleEmails.add(account.name); 
        Log.i("DGEN ACCOUNT","CALENDAR LIST ACCOUNT/"+account.name); 
       } 

       if (!possibleEmails.isEmpty() && possibleEmails.get(0) != null) { 
        String email = possibleEmails.get(0); 
        return email; 

       } 
       return null; 
      } 

Этот код добавить имя контакта и по телефону я могу видеть, что по телефону он находится на [email protected], но это не синхронизация с удаленной учетной записью. Я не могу найти его на учетной записи gmail как на контакте или на другом устройстве, в котором тот же аккаунт

Я также пытаюсь ввести статическую учетную запись google [email protected], но результат будет таким же, добавить к контакту телефона, но не синхронизировать с google.

UPDATE код ОК, я забыл включить синхронизацию с Google учетной записи на устройстве

ответ

1

Ваш код работает отлично на моих устройствах (Android 4.0.4 и 4.1.2), на сервере контактов Google для учетная запись появляется автоматически и с одного устройства на другое устройство. Кстати, спасибо за код.

IMHO Проблема заключается не в коде, а в настройках синхронизации вашего устройства.

+0

Спасибо, это была проблема синхронизации моих устройств. Благодарю. – drd

Смежные вопросы