我正在尝试在现有联系人上插入和更新信息,因此我创建了一个示例应用程序来开发此功能。我希望我的示例应用程序能够在联系人上插入(如果存在)或更新电子邮件地址。
我通过系统意图选择联系人,如下所示:
startActivityForResult(new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI), PICK_CONTACT_REQUEST);
返回的URI是所选的“联系人”(“原始联系人”?)的URI,格式如下:
content://com.android.contacts/contacts/lookup/0r2-2A90214945/2
。我可以通过执行以下代码来获取所有这些“数据”(“原始联系人”?)项:
Cursor cursor = contentResolver.query(mContactUri, null, null, null, null);
try {
if (cursor.moveToFirst()) {
for(int i=0; i < cursor.getColumnCount(); i++) {
String message = cursor.getColumnName(i);
Log.v("", message);
}
}
} finally {
cursor.close();
}
通过这个,我应该能够确定联系人是否已经有一个 CommonDataTypes.Email Data
成员:
cursor.getColumnIndex(CommonDataKinds.Email.CONTENT_ITEM_TYPE) != -1;
然后执行以下操作之一,以便 插入
或 更新
Data:
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(mContactUri)
.withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
.withValue(Email.DISPLAY_NAME, "somebody@android.com")
.withValue(Email.TYPE, Email.TYPE_HOME)
.build());
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
但是这给了我一个异常:
java.lang.UnsupportedOperationException: URI: content://com.android.contacts/contacts/lookup/0r2-2A90314945/2, calling user:
希望有人能看出我错过了什么。
PS,我正在使用以下权限:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />