【发布时间】:2021-12-19 21:43:49
【问题描述】:
为了了解 androids ContacsContract 的工作原理,我尝试向联系人添加自定义条目。之后阅读文档、教程和观看 youtube 视频一整天,我仍然没有进一步完成这项任务。
我得到的最接近的是这个文件https://developer.android.com/reference/kotlin/android/provider/ContactsContract.Data 说明
例如,如果您将“最喜欢的歌曲”的数据行添加到 Google 帐户拥有的原始联系人,它不会同步到服务器,因为 Google 同步适配器不会知道如何处理这种数据类型。因此,新数据类型通常与新帐户类型(即新同步适配器)一起引入。
他们写了我正在尝试的内容,但遗憾的是没有提供如何完成此任务的解决方案。如果有人能提供一个简单的示例,将喜欢的歌曲的数据行添加到联系人并通过代码检索它,那就太好了。
__
我自己得到的:
一种获取基本联系信息的方法:
import android.content.ContentResolver
import android.database.Cursor
import android.provider.ContactsContract
fun fetchContacts(resolver: ContentResolver) : MutableList<ItemContact> {
var cols = listOf<String>(
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone._ID,
).toTypedArray()
var cursor : Cursor? = resolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
cols, null, null,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
)
var contactsList : MutableList<ItemContact>
= emptyList<ItemContact>().toMutableList()
if (cursor != null && cursor.count > 0) {
while(cursor.moveToNext()){
contactsList.add(ItemContact(
name = cursor.getString(0),
number = cursor.getString(1),
contact_id = cursor.getString(2),
))
}
}
return contactsList
}
及其对应的数据类
data class ItemContact (
val name: String,
val number: String,
val contact_id: String,
)
根据我目前的理解,我需要向给定的联系人添加一个新的 RawContact,代表我的应用程序,并将最喜欢的歌曲添加为单个数据条目,同时创建它。此 RawContact 应该能够使用检索到的contact_id 连接到联系人。然后我需要检查是否存在代表我的应用程序的 RawContact 用于联系人,如果存在,我将能够检索存储的歌曲,否则我在 UI 中留下占位符文本,仍然需要选择歌曲。不知何故,这涉及到一个自定义 Mimetype,但我仍然不确定这是什么以及如何创建一个。
【问题讨论】:
标签: android kotlin android-contacts