每当我想新数据添加到现有的Android接触,我用下面的函数来检索所有RawContacts
标识为给定的接触ID:与Android的特殊要求选择RawContacts
protected ArrayList<Long> getRawContactID(String contact_id) {
ArrayList<Long> rawContactIDs = new ArrayList<Long>();
String[] projection = new String[] { ContactsContract.RawContacts._ID };
String where = ContactsContract.RawContacts.CONTACT_ID + " = ?";
String[] selection = new String[] { contact_id };
Cursor c = getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI, projection, where, selection, null);
try {
while (c.moveToNext()) {
rawContactIDs.add(c.getLong(0));
}
}
finally {
c.close();
}
return rawContactIDs;
}
之后我只是用插入数据的ContentResolver
:
getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
这是所有RawContacts
标识已完成之前找到。当然,所有数据都会重复添加。因此,我现在只想返回一个结果,但这必须满足特殊要求。
我想调整我上面的功能,使得其结果符合下列要求:
ContactsContract.RawContactsColumn.DELETED
必须为0- 的
RawContacts
项不能是固定一个类似Facebook的 ContactsContract.SyncColumns.ACCOUNT_TYPE
最好是“com.google”。所以如果有一个条目符合这个要求,它应该被退回。如果没有,则返回剩余的任何条目。
我该怎么做(最有效率)?我不想让查询变得复杂。
为什么不在自己的帐户中使用同步适配器,并将数据放入该帐户?那应该给你你正在寻找的控制 – 2013-02-16 20:08:51
谢谢!优点是:如果您可以将其添加到Google原始联系人,它会自动将所有联系人的数据同步到Google联系人(通常,如果同步处于打开状态)。如果我创建了我自己的帐户和同步适配器,那么我需要请求几个额外的权限,而且我必须手动实现一些服务器的同步。 – caw 2013-02-17 01:55:37