在Android通讯录上设置SEND_TO_VOICEMAIL

时间:2011-09-04 11:09:46

标签: android android-contacts

我正在尝试将 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 =?

我真的不知道该怎么办了。任何帮助将非常感激。 感谢。

2 个答案:

答案 0 :(得分:2)

根据[手册,您要查找的SEND_TO_VOICEMAIL字段不在ContactsContract.Data表中,而是在ContactsContract.Contacts表中。看起来你正试图修改错误的表格。

有关每个表格中的字段,请参阅ContactsContract.DataContactsContract.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()); 
}