Android 在原始联系人(新联系人)中插入自定义铃声

Android 在原始联系人(新联系人)中插入自定义铃声,android,addressbook,contactscontract,ringtone,rawcontacts,Android,Addressbook,Contactscontract,Ringtone,Rawcontacts,我想在联系人中添加自定义铃声(在创建联系人之前) 我使用此代码成功地在联系人(已创建)中添加了自定义铃声: 因此,现在,我尝试在rawcontact(尚未创建的新联系人)中插入自定义铃声。我已尝试使用以下代码: changesToCommit.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) .withValueBackReference(Con

我想在联系人中添加自定义铃声(在创建联系人之前)

我使用此代码成功地在联系人(已创建)中添加了自定义铃声:

因此,现在,我尝试在rawcontact(尚未创建的新联系人)中插入自定义铃声。我已尝试使用以下代码:

changesToCommit.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
                    .withValueBackReference(ContactsContract.RawContacts._ID, 0)
                    .withValue(ContactsContract.RawContacts.CUSTOM_RINGTONE, ringtone_uri_string)
                    .build());

但它不起作用。有什么想法吗?

自定义铃声
是一个
联系人
表格字段,而不是
原始联系人

您需要引用联系人id,而不是原始联系人id,因此在插入新的原始联系人时,我不确定这是否可行

编辑

你说得对,好像我错过了
RawContacts
中的另一个
自定义铃声
字段。 在这种情况下,我认为这应该是添加原始联系人的第一个调用的一部分,如下所示:

ArrayList ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
   .withValue(RawContacts.ACCOUNT_TYPE, "my_account_type")
   .withValue(RawContacts.ACCOUNT_NAME, "my_account_name")
   .withValue(RawContacts.CUSTOM_RINGTONE, ringtone_uri_string)
   .build());
// Add multiple Data.CONTENT_URI rows here, e.g.:
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
   .withValueBackReference(Data.RAW_CONTACT_ID,  0)
   .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
   .withValue(StructuredName.DISPLAY_NAME, "Bob Dylan")
   .build());
...
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
ArrayList ops=new ArrayList();
添加(ContentProviderOperation.newInsert(RawContacts.CONTENT\uURI)
.withValue(RawContacts.ACCOUNT类型,“我的帐户类型”)
.withValue(RawContacts.ACCOUNT\u NAME,“我的帐户\u NAME”)
.withValue(RawContacts.CUSTOM\u铃声、铃声\u uri\u字符串)
.build());
//在此处添加多个Data.CONTENT\u URI行,例如:
add(ContentProviderOperation.newInsert(Data.CONTENT\u URI)
.带ValueBackReference(Data.RAW\u CONTACT\u ID,0)
.withValue(Data.MIMETYPE、StructuredName.CONTENT\u ITEM\u TYPE)
.withValue(StructuredName.DISPLAY_NAME,“Bob Dylan”)
.build());
...
getContentResolver().applyBatch(contacts contract.AUTHORITY,ops);

您确定
自定义铃声
不是联系人字段吗?在文档中,我在
联系人
列中看到
自定义铃声
,但在
原始联系人
列中也看到:
ArrayList ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
   .withValue(RawContacts.ACCOUNT_TYPE, "my_account_type")
   .withValue(RawContacts.ACCOUNT_NAME, "my_account_name")
   .withValue(RawContacts.CUSTOM_RINGTONE, ringtone_uri_string)
   .build());
// Add multiple Data.CONTENT_URI rows here, e.g.:
ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
   .withValueBackReference(Data.RAW_CONTACT_ID,  0)
   .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
   .withValue(StructuredName.DISPLAY_NAME, "Bob Dylan")
   .build());
...
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);