在rawcontact中插入自定义铃声(新联系人)

时间:2017-01-12 15:49:47

标签: android addressbook contactscontract ringtone rawcontacts

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

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

String select = ContactsContract.Contacts._ID + "=?";
String[] args = new String[]{getAndroidId()};

changesToCommit.add(ContentProviderOperation.newUpdate(ContactsContract.Contacts.CONTENT_URI)
        .withSelection(select, args)
        .withValue(ContactsContract.Contacts.CUSTOM_RINGTONE, ringtone_uri_string)
        .build());

所以现在,我尝试在rawcontact中插入一个自定义铃声(一个尚未创建的新联系人)。我试过这段代码:

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

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

1 个答案:

答案 0 :(得分:0)

CUSTOM_RINGTONEContacts表格字段,而不是RawContacts

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

修改

你是对的,好像我错过了CUSTOM_RINGTONE中的其他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);