2012-02-17 8 views
0

Я работаю над приложением, в котором я хочу обновить контакт конкретного человека. Когда я обновляю только контакт с именем и фамилией, тогда он работает нормально, но я хочу обновить полную информацию о контакте, например, адрес электронной почты, номер, почтовый адрес и т. Д.Обновить контактную информацию android

Просьба предоставить мне полезную ссылку. Заранее спасибо.

ответ

3

каждое поле (адрес электронной почты, имя, адрес) имеет свой тип mime, который вы должны использовать , чтобы обновить поле.

позволяет попытаться обновить электронную почту, например.

Сначала вы должны найти детали, которые хотите обновить. мы будем работать с таблицей данных, где каждый Data.RAW_CONTACT_ID представляет детальную информацию о некотором контакте.

Итак, нам нужно найти Data.RAW_CONTACT_ID, где id - это идентификатор контакта, который вы хотите изменить .

Теперь нам нужно найти mimetype (конкретная строка, представляющая деталь) электронной почты (Email.CONTENT_ITEM_TYPE).

Данные электронной почты хранятся в столбце Email.DATA - там мы помещаем новое электронное письмо.

если вы хотите конкретный тип электронной почты, вы должны добавить его в запросе: , например, если вы хотите добавить домашний адрес электронной почты, то вы должны добавить Email.TYPE_HOME к запросу.

затем мы создаем запрос и, наконец, применяем изменение.

Вот нелогич-:

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

    String emailParams = Data.RAW_CONTACT_ID + " = ? AND " + Data.MIMETYPE + " = ?"; 
    String[] emailParamsWhere = new String[] { "contact_id", Email.CONTENT_ITEM_TYPE }; 

    ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI).withSelection(emailParams, emailParamsWhere).withValue(Email.DATA, "new email").withValue(Email.TYPE, Email.TYPE_HOME) 
      .build()); 

    try 
    { 
     ContentProviderResult[] res = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 

     if (res != null) 
     { 
      return true; 
     } 

     return false; 
    } 

    catch (RemoteException e) 
    { 
     Log.d(TAG, e.getMessage()); 
     e.printStackTrace(); 
    } 

    catch (OperationApplicationException e) 
    { 
     Log.d(TAG, e.getMessage()); 
     e.printStackTrace(); 
    } 

Для обновления мобильного телефона, использовать этот запрос:

 String phoneParams = Data.RAW_CONTACT_ID + " = ? AND " + Data.MIMETYPE + " = ? AND " + Phone.TYPE + " = " + Phone.TYPE_MOBILE; 
     String[] phoneParamsWhere = new String[] { "contact_id", Phone.CONTENT_ITEM_TYPE }; 

     ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI).withSelection(phoneParams, phoneParamsWhere).withValue(Phone.NUMBER, "mobile_number") 
       .withValue(Phone.TYPE, Phone.TYPE_MOBILE).build()); 

Надежда Я помог

+0

Спасибо за ваш обмен кода, но когда я использовал это с контактом первым и обновление имени, чем тип электронной почты, измененный с неизвестным типом. Я хочу обновить полную контактную информацию, такую ​​же, как android contact api works. – Jitendra

+0

просто добавьте withValue (Email.TYPE, Email.TYPE_HOME) (или любой тип, который вам нравится) в конец запроса, например, в примере мобильного номера, который я разместил. Я обновил ответ. – dor506

+0

Спасибо, его работа. вы можете сказать мне одну вещь? предположим, что пользователь не вставлял адрес электронной почты, но во время обновления он хочет вставить или обновить адрес электронной почты, а затем как он обрабатывается? plz help ... – Jitendra

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