【发布时间】:2012-01-26 22:07:27
【问题描述】:
我一直在努力编写以下代码,但不幸的是,该条目分配给了错误的联系人。我不知道为什么。测试了 hours 天,但找不到错误。你能帮帮我吗?
我想使用代码从联系人列表中选择一个人(使用联系人选择器),然后将此人的事件条目(出生日期)添加到联系人表中。
第 1 步:
我已经在清单文件中设置了权限:
<uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>
第 2 步:
已定义联系人选择器的 ID:
private static final int CONTACT_PICKER_ID = 123;
第 3 步:
联系人选择器被调用:
Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(contactPickerIntent, CONTACT_PICKER_ID);
第 4 步:
另一种方法监听联系人选择器的结果并尝试为所选用户添加事件:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case CONTACT_PICKER_ID:
Uri selectedPerson = data.getData();
String contactId = selectedPerson.getLastPathSegment();
// ADD A NEW EVENT FOR THE SELECTED CONTACT --- BEGIN
ContentValues values = new ContentValues();
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE);
values.put(ContactsContract.Data.RAW_CONTACT_ID, contactId);
values.put(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY);
values.put(ContactsContract.CommonDataKinds.Event.RAW_CONTACT_ID, contactId);
values.put(ContactsContract.CommonDataKinds.Event.LABEL, "");
values.put(ContactsContract.CommonDataKinds.Event.START_DATE, "2010-01-28"); // hard-coded date of birth
Uri created = null;
try {
created = getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
}
catch (Exception e) {
}
if (created == null) {
Toast.makeText(this.getApplicationContext(), "Failed inserting the event!", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(this.getApplicationContext(), "Successfully inserted the event!", Toast.LENGTH_SHORT).show();
}
// ADD A NEW EVENT FOR THE SELECTED CONTACT --- END
break;
}
}
}
该事件已成功插入数据库并显示在 Google 联系人中 - 但不幸的是,它分配给了错误的联系人。为什么会这样?我从联系人选择器中得到的 contactId 是否有误?
【问题讨论】:
-
无论如何我都不是安卓专家,但是你需要读取联系人来选择联系人的能力以及写入能力吗?
-
根据developer.android.com/reference/android/… WRITE_CONTACTS 没有读取它们的能力。再说一次,我不知道答案,这只是让我望而却步的事情。
-
抱歉,READ_CONTACTS 权限也设置了。但无论如何,阅读过程不是问题。是文案不行。
-
只是检查一下,就像我说我不是 android 人,但喜欢阅读代码,这看起来像是“可能”导致问题的东西。
-
好的,谢谢您的评论!我很感激,真的:) 我很高兴有人关注这个问题。每次尝试,都有机会发现错误:)
标签: android contacts android-contacts contactscontract