2017-01-12 4 views
0

Я пытаюсь обновить контакт в телефонной книге, но мне нужно, чтобы проверить, является ли контакт не находится под которой голова TYPE_WORK, TYPE_MOBILE и т.д ....проверка и обновление телефонной книги в Android

public void updateContact (String newNumber,String oldNumber) 
      throws RemoteException, OperationApplicationException { 

     //ASSERT: @contactId alreay has a work phone number 
     ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 


     String selectPhone = ContactsContract.CommonDataKinds.Phone.NUMBER + "=? AND " + ContactsContract.Data.MIMETYPE + "='" + 
       ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'" + " AND " + ContactsContract.CommonDataKinds.Phone.TYPE + "=?"; 

     String[] phoneArgs = new String[]{oldNumber, String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)}; 

     if(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI) 
       .withSelection(selectPhone, phoneArgs).equals("")) 
     { 
      Toast.makeText(getContext(), "MOBILE FIELD IS EMPTY", Toast.LENGTH_SHORT).show(); 
      phoneArgs = new String[]{oldNumber, String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE_WORK)}; 
      if(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI) 
        .withSelection(selectPhone, phoneArgs).equals("")) 
      { 
       Toast.makeText(getContext(), "Work FIELD IS EMPTY", Toast.LENGTH_SHORT).show(); 

      } 
      else 
      { 
       Toast.makeText(getContext(), "Work FIELD IS NOT EMPTY", Toast.LENGTH_SHORT).show(); 

       ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI) 
         .withSelection(selectPhone, phoneArgs) 
         .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, newNumber) 
         .build()); 
      } 
     } 
     else { 
      ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI) 
        .withSelection(selectPhone, phoneArgs) 
        .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, newNumber) 
        .build()); 
     } 

     getContext().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
    } 

Я попытался Doing But Not Succeed..PLs Help

ответ

1

Вам нужно получить идентификатор контакта и тип контакта и использовать его в аргументах запроса на обновление. Я пробовал это, и он работал. -

public void updateContact(String newNumber, String oldNumber) throws RemoteException, OperationApplicationException { 

    // get contact type and contact id 
    String contactId = null; 
    int contactType = -1; 
    Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(oldNumber)); 
    Cursor cursor = getContentResolver().query(
      uri, 
      new String[]{ContactsContract.PhoneLookup._ID, ContactsContract.PhoneLookup.TYPE}, 
      null, 
      null, 
      null); 

    if (cursor != null) { 
     while (cursor.moveToNext()) { 
      contactId = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup._ID)); 
      contactType = cursor.getInt(cursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup.TYPE)); 
     } 
     cursor.close(); 
    } 

    //ASSERT: @contactId alreay has a work phone number 
    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 


    String selectPhone = ContactsContract.Data.CONTACT_ID + "=? AND " + ContactsContract.Data.MIMETYPE + "='" + 
      ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'" + " AND " + ContactsContract.CommonDataKinds.Phone.TYPE + "=?"; 

    String[] phoneArgs = null; 

    if (contactType == ContactsContract.CommonDataKinds.Phone.TYPE_WORK) { 
     Toast.makeText(this, "MOBILE FIELD IS EMPTY", Toast.LENGTH_SHORT).show(); 
     phoneArgs = new String[]{contactId, String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE_WORK)}; 
    } else if (contactType == ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) { 
     Toast.makeText(this, "Work FIELD IS EMPTY", Toast.LENGTH_SHORT).show(); 
     phoneArgs = new String[]{contactId, String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)}; 
    } 
    ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI) 
      .withSelection(selectPhone, phoneArgs) 
      .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, newNumber) 
      .build()); 


    ContentProviderResult[] contentProviderResults = this.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 
    if (contentProviderResults[0].count > 0) { 
     Toast.makeText(this, "Updated Contact Successfully", Toast.LENGTH_SHORT).show(); 
    } else { 
     Toast.makeText(this, "Contact could not be updated", Toast.LENGTH_SHORT).show(); 
    } 
} 

Удостоверьтесь, что у вас есть разрешение на чтение и запись контактов. Надеюсь, это поможет!

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