每當我想新數據添加到現有的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