Gra*_*eme 18 android contactscontract android-contacts
我正在尝试插入和更新现有联系人的一条信息,因此我创建了一个示例应用程序以开发功能.我希望我的示例应用程序执行的操作是插入(或者如果存在)更新联系人的电子邮件地址.
我正在通过系统Intent选择一个联系人,如下所示:
startActivityForResult(new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI), PICK_CONTACT_REQUEST);
Run Code Online (Sandbox Code Playgroud)
返回的URI是Contact
(RawContact
?)的URI,它被选中并以这种形式出现:
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();
}
Run Code Online (Sandbox Code Playgroud)
从这里我应该能够确定联系人是否已经有一个CommonDataTypes.Email Data
成员:
cursor.getColumnIndex(CommonDataKinds.Email.CONTENT_ITEM_TYPE) != -1;
Run Code Online (Sandbox Code Playgroud)
然后执行以下的任一个Insert
或Update
所述数据:
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);
Run Code Online (Sandbox Code Playgroud)
但这给了我一个例外:
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" />
Run Code Online (Sandbox Code Playgroud)
Gra*_*eme 44
Android用户需要更新他们的文档.它实际上让我更少了解发生的事情,而不是从猜测中得到的.它表明你可以撤回一个Contact
,其中包含许多RawContacts
将包含的内容Data
.
这种解释是完全错误的.ContactContracts数据是三个正常的平均日常数据库表*:
ContactContract Tables
表:联系人
访问URI:
Contacts.CONTENT_URI
首要的关键**:
Data._ID
描述:
此表包含有关联系人的信息(何时添加,是什么用户图标,是否有自定义铃声).
关系:它与
RawContact
表具有1对多的关系.
访问URI:
RawContacts.CONTENT_URI
首要的关键:
Data._ID
外键**:
Data.CONTACT_ID
描述:
此表包含有关一组相关数据项的信息.RawContact可以包含电子邮件类型,电子邮件显示名称,电话号码,电话显示名称等.RawContact可以与其他RawContacts聚合,以便
Contact
在用户看到它时.联系人只能包含一个RawContact.关系:它与
Data
表具有1对多的关系.
表:数据
访问URI:
Data.CONTENT_URI
首要的关键:
Data._ID
外键:
Data.RAW_CONTACT_ID
描述:
该表包含单个信息字段.电子邮件地址,电话号码,电话号码类型(家庭/工作),昵称,显示名称.
在回答这个问题时
我已将整个示例项目上传到GitHub,以便其他人可以查看如何使用ContactContract查询,更新和插入记录.
您可以在此处找到要下载的项目:https: //github.com/gwoodhouse/ContactContractSample
如果你只是想查看执行查询/更新/插入的java代码,这里是类文件:https: //github.com/gwoodhouse/ContactContractSample/blob/master/ContactsIntegration/src/com/woodhouse/example/activity /ContactsIntegrationActivity.java
希望这可以帮助!
*不是表格,而是ContentProvider
**严格来说并非如此.
归档时间: |
|
查看次数: |
9207 次 |
最近记录: |