2011-09-04 59 views
3

我在尝试修改的值SEND_TO_VOICEMAIL从0到1,反之亦然。 我成功修改了其他联系人的详细信息,例如姓名,电话号码,昵称,电子邮件地址等等,但我需要更改SEND_TO_VOICEMAIL。这是2(2)天,我疯了!这甚至有可能吗?这应该!在Android联系人上设置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:没有这样的列:send_to_voicemail:,编译时:UPDATE数据SET send_to_voicemail =? WHERE _id =?

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

P.S. 我并不是java上的大师

回答

2

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

请参阅ContactsContract.DataContactsContract.Contacts了解每个表中的字段。

+0

谢谢你,这就是答案!我刚刚将“ContactsContract.Data”更改为“ContactsContract.Contacts”。 – Nifhel

+0

我在三星S3上有问题,有人吗? – powder366

+0

将SEND_TO_VOICEMAIL标志用于传入呼叫吗?或者在来电前进行工作设置? –

2

最好是通过ContentProviderContacts.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()); 
}