在rawcontact(新联系人)中插入自定义铃声
Insert a custom ringtone in a rawcontact (new contact)
我想在 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());
但是没用。有什么想法吗?
CUSTOM_RINGTONE
是 Contacts
table 字段,而不是 RawContacts
.
您需要引用 contact-id,而不是原始的 contact-id,所以我不确定插入新的原始联系人时是否可行。
编辑
你说得对,我似乎错过了 RawContacts
中的其他 CUSTOM_RINGTONE
字段。
在那种情况下,我认为这应该是添加 raw-contact 的第一次调用的一部分,如下所示:
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);
我想在 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());
但是没用。有什么想法吗?
CUSTOM_RINGTONE
是 Contacts
table 字段,而不是 RawContacts
.
您需要引用 contact-id,而不是原始的 contact-id,所以我不确定插入新的原始联系人时是否可行。
编辑
你说得对,我似乎错过了 RawContacts
中的其他 CUSTOM_RINGTONE
字段。
在那种情况下,我认为这应该是添加 raw-contact 的第一次调用的一部分,如下所示:
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);