2015-09-04 6 views
0

Я создал необработанный контакт, который обновляется, если есть какие-либо изменения от контакта. При переходе пользователь удаляет необработанный контакт перед следующей синхронизацией, контакт имеет грязный флаг.Обновление грязного исходного контакта

Из моей реализации, в таком scenerio, я сначала очищаю флаг и обновляю контакт.

private static void clearDirtyFlag(Context context, long rawContactId, 
            BatchOperation batchOperation) { 
    final ContactOperations contactOp = 
      ContactOperations.updateExistingContact(context, rawContactId, 
        batchOperation); 

    final Uri uri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId); 
    contactOp.updateDirtyFlag(false, uri); 
} 

private static void updateContact(Context context, 
            ContentResolver resolver, String accountName, User user, 
            long rawContactId, BatchOperation batchOperation) { 
    Uri uri; 
    String cellPhone = null; 
    String otherPhone = null; 
    String email = null; 

    final Cursor c = 
      resolver.query(Data.CONTENT_URI, DataQuery.PROJECTION, 
        DataQuery.SELECTION, 
        new String[]{String.valueOf(rawContactId)}, null); 
    final ContactOperations contactOp = 
      ContactOperations.updateExistingContact(context, rawContactId, 
        batchOperation); 

    try { 
     while (c.moveToNext()) { 

      final long id = c.getLong(DataQuery.COLUMN_ID); 
      final String mimeType = c.getString(DataQuery.COLUMN_MIMETYPE); 
      uri = ContentUris.withAppendedId(Data.CONTENT_URI, id); 

      if (mimeType.equals(StructuredName.CONTENT_ITEM_TYPE)) { 
       final String lastName = 
         c.getString(DataQuery.COLUMN_FAMILY_NAME); 
       final String firstName = 
         c.getString(DataQuery.COLUMN_GIVEN_NAME); 
       contactOp.updateName(uri, firstName, lastName, user 
         .getName()); 
      } else if (mimeType.equals(Phone.CONTENT_ITEM_TYPE)) { 
       final int type = c.getInt(DataQuery.COLUMN_PHONE_TYPE); 

       if (type == Phone.TYPE_MOBILE) { 
        cellPhone = c.getString(DataQuery.COLUMN_PHONE_NUMBER); 
        contactOp.updatePhone(cellPhone, user.getCellPhone(), 
          uri); 
       } else if (type == Phone.TYPE_OTHER) { 
        otherPhone = c.getString(DataQuery.COLUMN_PHONE_NUMBER); 
        contactOp.updatePhone(otherPhone, user.getCellPhone(), 
          uri); 
       } 
      } else if (Data.MIMETYPE.equals(Email.CONTENT_ITEM_TYPE)) { 
       email = c.getString(DataQuery.COLUMN_EMAIL_ADDRESS); 
       // contactOp.updateEmail(user.getEmail(), email, uri); 

      } 
     } // while 
    } finally { 
     c.close(); 
    } 


} 

вопрос контакт никогда не обновляется, поскольку raw_contact_id больше не существует. Я реализую это правильно или каким образом я могу обновить грязный сырой контакт. Спасибо

ответ

0

Доступ к удаленным контактам может получить только приложение SyncAdapter (приложение учетной записи, к которому относятся необработанные контакты, например Facebook, Google, корпорация). Ни одно другое приложение не сможет получить доступ к этому необработанному контакту, поскольку он должен быть удален адаптером синхронизации после удаления его на сервере. Если вы пишете адаптер синхронизации, вы передаете CALLER_IS_SYNCADAPTER в URI.

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

  • Нет связанных вопросов^_^