更新多个电话号码的联系人

时间:2013-05-08 11:45:57

标签: android android-contentprovider android-contacts

我有这段代码

public void updateContact (String contactId, String newNumber) {ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 

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

    String[] phoneArgs = new String[]{contactId};
    ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
                    .withSelection(selectPhone, phoneArgs)
                    .withValue(Phone.NUMBER, newNumber)
                    .build()); 
            try { getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
            } catch (RemoteException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (OperationApplicationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }       
    }

我从这里How to update contact number using Android获取并更改了它以便通过我的所有联系人并为他们每个人添加一个我自己的前缀。

我浏览了所有联系人,我提供了这个 String id = phones.getString(phones.getColumnIndex(ContactsContract.Contacts._ID));

联系人对上述功能的ID。但是有些联系人特别是那些有多个号码且有些只有一个号码的联系人,即使给定的id是正确的,也不要改变以获得新的前缀?! 。 我在这里想念什么,我不知道该改变什么。我认为它可能是mime类型,但我可以想象有人可能没有使用Android预装的手机类型并使用自定义类型。 我没有得到任何错误。谢谢大家的时间!!!

1 个答案:

答案 0 :(得分:1)

我最后改变了我的代码才能正常工作,我传递了联系人ID,但我需要手机ID ...这里是正确的代码。

public void updateContact (String contactId,  String newNumber) {        


    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
    String selectPhone = Data._ID + "=? AND " + Data.MIMETYPE + "='"  + 
                         Phone.CONTENT_ITEM_TYPE + "'"; 

            String[] phoneArgs = new String[]{contactId};
            ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
                    .withSelection(selectPhone, phoneArgs)
                    .withValue(Phone.NUMBER, newNumber)
                    .build()); 
            try {
                getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
            } catch (RemoteException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (OperationApplicationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }       
    }   

不要忘记在android清单(写联系人)

上设置适当的权限