getContentResolver().query( ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId, null, null)
时间: 2024-03-31 22:34:37 浏览: 102
这段代码也是使用了Android提供的ContentProvider访问联系人数据,查询了指定联系人ID的电子邮件地址。具体来说,它通过调用getContentResolver()方法获取ContentResolver对象,然后调用query()方法查询系统联系人电子邮件地址数据。它的参数如下:
- Uri uri:ContentProvider的URI,表示要查询的数据源。在这里,它是ContactsContract.CommonDataKinds.Email.CONTENT_URI,表示查询系统联系人电子邮件地址数据。
- String[] projection:查询需要返回哪些列,如果为null,表示返回所有列。
- String selection:查询数据的筛选条件,相当于SQL语句中的WHERE部分。在这里,它是ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,表示查询指定联系人ID的电子邮件地址。
- String[] selectionArgs:如果在selection中有占位符(如“name = ?”),那么可以使用selectionArgs参数传递具体的值。
- String sortOrder:查询结果的排序方式。
在这个例子中,它使用了null作为projection和sortOrder的值,表示返回所有列并按默认方式排序。查询结果是一个Cursor对象,可以通过Cursor的方法遍历查询结果集合。
相关问题
getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null),表示根据联系人ID查询联系人的电话。
_PWM_DUTY_CYCLE);
usleep(1000);
set_pwm_duty_cycle(MUSIC_PWM_CHANNEL, 0);
usleep(1000);
for (int i = 0; i < music_chunk_size; i++) {
set_pwm_duty_cycle(MUSIC是的,这段代码使用了Android提供的ContentProvider访问联系人数据,查询了指定联系人ID的电话_PWM_CHANNEL, music_data[music_index + i]);
usleep(1000);
}
set_pwm_duty_cycle(MUSIC_PWM_CHANNEL号码。具体来说,它通过调用getContentResolver()方法获取ContentResolver对象,然后调用query()方法查询, 0);
music_index += music_chunk_size;
}
free(music_data);
}
void marquee() {
for (系统联系人数据。它的参数如下:
- Uri uri:ContentProvider的URI,表示要查询的数据源。在这int i = 0; i < 4; i++) {
set_gpio_output_value(LED_GPIO_PIN_1, i == 0里,它是ContactsContract.CommonDataKinds.Phone.CONTENT_URI,表示查询系统联系人电话号码数据。
- String[] projection:);
set_gpio_output_value(LED_GPIO_PIN_2, i == 1);
set_gpio_output_value(LED_GPIO_PIN_3, i查询需要返回哪些列,如果为null,表示返回所有列。
- String selection:查询数据的筛选条件,相当 == 2);
set_gpio_output_value(LED_GPIO_PIN_4, i == 3);
usleep(LED_PWM_DUTY_CYCLE);
于SQL语句中的WHERE部分。在这里,它是ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = }
set_gpio_output_value(LED_GPIO_PIN_1, 1);
set_gpio_output_value(LED_GPIO_PIN_2, 1 " + contactId,表示查询指定联系人ID的电话号码。
- String[] selectionArgs:如果在selection中有占);
set_gpio_output_value(LED_GPIO_PIN_3, 1);
set_gpio_output_value(LED_GPIO_PIN_4, 1);
位符(如“name = ?”),那么可以使用selectionArgs参数传递具体的值。
- String sortOrder:查询 usleep(LED_PWM_PERIOD - 4 * LED_PWM_DUTY_CYCLE);
set_gpio_output_value(LED_GPIO_PIN_1, 0结果的排序方式。
在这个例子中,它使用了null作为projection和sortOrder的值,表示返回所有列);
set_gpio_output_value(LED_GPIO_PIN_2, 0);
set_gpio_output_value(LED_GPIO_PIN_3, 0);
并按默认方式排序。查询结果是一个Cursor对象,可以通过Cursor的方法遍历查询结果集合。
private fun exportToApp() { thread { var count = 0 for (contacti in contactList) { if (contacti.isChecked) { val contentResolver = getContentResolver() val contact = ContentValues().apply { put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, contacti.name) } val uri: Uri? = contentResolver.insert(ContactsContract.RawContacts.CONTENT_URI, contact) val rawContactId = uri?.lastPathSegment val phone = ContentValues().apply { put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId) put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) put(ContactsContract.CommonDataKinds.Phone.NUMBER, contacti.phone) } contentResolver.insert(ContactsContract.Data.CONTENT_URI, phone) val email = ContentValues().apply { put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId) put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE) put(ContactsContract.CommonDataKinds.Email.ADDRESS, contacti.email) } contentResolver.insert(ContactsContract.Data.CONTENT_URI, email) count++ } } runOnUiThread { Toast.makeText(this,"已导出${count}位联系人!",Toast.LENGTH_LONG).show() } } finish()}这段代码出现了java.lang.IllegalArgumentException: raw_contact_id is required错误,请分析错误原因
这个错误是因为在插入联系人信息的时候,没有正确地获取到新插入的RawContact的id。在这段代码中,我们尝试通过调用`contentResolver.insert()`方法来插入联系人信息,但是这个方法会返回新插入的记录的URI。我们需要从这个URI中提取新插入联系人的RawContact的id,然后在插入电话号码和电子邮件地址的时候使用这个id。
具体来说,我们应该在插入联系人信息之前,先插入一个空的RawContact记录,然后再根据返回的URI获取到这个记录的id。代码可以修改为以下形式:
```
val rawContact = ContentValues()
val rawContactUri = contentResolver.insert(ContactsContract.RawContacts.CONTENT_URI, rawContact)
val rawContactId = ContentUris.parseId(rawContactUri)
```
然后在插入电话号码和电子邮件地址的时候,使用这个`rawContactId`即可。
```
val phone = ContentValues().apply {
put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId)
put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
put(ContactsContract.CommonDataKinds.Phone.NUMBER, contacti.phone)
}
contentResolver.insert(ContactsContract.Data.CONTENT_URI, phone)
val email = ContentValues().apply {
put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId)
put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
put(ContactsContract.CommonDataKinds.Email.ADDRESS, contacti.email)
}
contentResolver.insert(ContactsContract.Data.CONTENT_URI, email)
```
阅读全文
相关推荐














