我正在尝试插入和更新一条信息existing联系,因此我创建了一个示例应用程序来开发该功能。我希望示例应用程序做的就是插入(或如果存在)更新联系人的电子邮件地址。
我通过系统意图选择联系人,如下所示:
startActivityForResult(new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI), PICK_CONTACT_REQUEST);
返回的 URI 是Contact
(RawContact
?)被选择并以这种形式出现:content://com.android.contacts/contacts/lookup/0r2-2A90214945/2
.
我可以拉回所有Data
(RawContact
?)通过执行以下代码来解决此问题:
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();
}
由此我应该能够确定联系人是否已经有通用数据类型.电子邮件 http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Email.html Data
member:
cursor.getColumnIndex(CommonDataKinds.Email.CONTENT_ITEM_TYPE) != -1;
然后执行以下操作之一Insert
or Update
the Data http://developer.android.com/reference/android/provider/ContactsContract.Data.html:
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(mContactUri)
.withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
.withValue(Email.DISPLAY_NAME, "[email protected] /cdn-cgi/l/email-protection")
.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" />