我正在尝试将 SEND_TO_VOICEMAIL 的值从0修改为1,反之亦然。 我成功修改了其他联系人的详细信息,例如姓名,号码,昵称,电子邮件,ecc ......但我需要更改SEND_TO_VOICEMAIL。
我尝试了很多可能性,但这应该有用......我想:
String rawContactId = "1";
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(
ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection( Data.RAW_CONTACT_ID + "=?" , new String[] { rawContactId })
.withValue(ContactsContract.RawContacts.SEND_TO_VOICEMAIL , 1)
.build()
);
try {
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException e) {
e.printStackTrace();
} catch (OperationApplicationException e) {
e.printStackTrace();
}
但是logcat说:
ERROR / AndroidRuntime(822):android.database.sqlite.SQLiteException:no 这样的列:send_to_voicemail :,同时编译:UPDATE数据SET send_to_voicemail =? WHERE _id =?
我真的不知道该怎么办了。任何帮助将非常感激。 感谢。
答案 0 :(得分:2)
根据[手册,您要查找的SEND_TO_VOICEMAIL字段不在ContactsContract.Data表中,而是在ContactsContract.Contacts表中。看起来你正试图修改错误的表格。
有关每个表格中的字段,请参阅ContactsContract.Data和ContactsContract.Contacts。
答案 1 :(得分:2)
最好通过ContentProvider
Contacts.CONTENT_URI
进行修改:
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newUpdate(Contacts.CONTENT_URI)
.withSelection(Contacts._ID + "=?", new String[]{hmout.get("cid").toString()})
.withValue(Contacts.SEND_TO_VOICEMAIL, 1)
.build());
try {
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
Log.e("Exception: ", e.getMessage());
}