每当我想向现有的 Android 联系人添加新数据时,我都会使用以下函数来检索RawContacts
给定联系人 ID 的所有 ID:
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
之前找到的所有 ID 完成的。当然,效果是重复添加所有数据。因此我现在只想返回一个结果,但这必须满足特殊要求。
我想调整上面的函数,使其结果满足以下要求:
ContactsContract.RawContactsColumn.DELETED
必须为 0- 该
RawContacts
条目不得像 Facebook 那样是安全的 ContactsContract.SyncColumns.ACCOUNT_TYPE
最好是“com.google”。所以如果有一个条目满足这个要求,它应该被退回。如果没有,则返回任何剩余条目。
我怎样才能做到这一点(最有效)?我不想让查询变得复杂。