電話の種類が異なる連絡先の電話番号を更新するときに問題が発生します。すべての数字にプレフィックス xxx を追加する必要があります。例: "ポール" は、モバイル: 42342397908、ホーム: 3453459534、職場: 4345436533、その他: 3253454354、その他: 3465465464、モバイル: 34564654654 を持っています。更新は機能していますが、保存するとこのようになります。モバイル: xxx42342397908、ホーム: xxx3453459534、職場: xxx4345436533、その他: xx3253454354、その他: xx3253454354、モバイル: xxx42342397908。同じ電話番号を持つ同じ電話タイプのものを上書きします。私の更新機能の下を見て、私を助けてください。
private void updateContact(String name, String phone,String id, String type) {
ContentResolver cr = getContentResolver();
String where = ContactsContract.Data.DISPLAY_NAME + " = ? AND " +
ContactsContract.Data.MIMETYPE + " = ? AND " +
String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE) + " = ? ";
String[] params = null;
/*
ContentProviderOperation.Builder builderPhone = ContentProviderOperation.newUpdate(Data.CONTENT_URI)
.withSelection(ContactsContract.Data.CONTACT_ID + "=?"+" AND "+ContactsContract.Data.MIMETYPE + "=?" + " AND "+Phone.TYPE+"=?",
new String[]{String.valueOf(id), Phone.CONTENT_ITEM_TYPE, String.valueOf(phoneType)});
*/
if (Integer.valueOf(type) == Phone.TYPE_MOBILE)
{
params = new String[] {name,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)};
}
else if (Integer.valueOf(type) == Phone.TYPE_HOME)
{
params = new String[] {name,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE_HOME)};
}
else if (Integer.valueOf(type) == Phone.TYPE_WORK)
{
params = new String[] {name,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE_WORK)};
}
else if (Integer.valueOf(type) == Phone.TYPE_OTHER)
{
params = new String[] {name,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE_OTHER)};
}
// ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE
Cursor phoneCur = managedQuery(ContactsContract.Data.CONTENT_URI, null, where, params, null);
/* */
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
if ( (null == phoneCur) ) {
createContact(name, phone);
} else {
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(where, params)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, type)
.build());
}
phoneCur.close();
try {
cr.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OperationApplicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}