2011-09-04 87 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()); 
}