1

我有这个代码

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();
            }       
    }

我从这里获取如何使用 Android 更新联系人号码并对其进行更改,以便通过我的所有联系人并向每个联系人添加我自己的前缀。

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

联系人的 id 到上面的函数。但是有些联系人,尤其是有多个号码和一些只有一个号码的联系人,即使给定的 id 是正确的,也不要更改以获取新的前缀?!. 我在这里想念什么我不知道要改变什么。我认为它可能是 mime 类型,但我可以想象有人可能没有使用 Android 预装类型的手机并使用自定义类型。我没有收到任何错误。谢谢大家的时间!!!

4

1 回答 1

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 manifest 上设置适当的权限(写联系人)

于 2013-05-14T09:52:04.287 回答