我正在尝试将数据记录添加到已存在的联系人中,我使用电话查找找到该联系人,我将联系_id字段,并添加一个新数据,并将raw_contact_id设置为_id字段.在一些联系人它只是不起作用,它将数据与不同的联系人匹配.(我认为它与存储在SIM卡上的联系人有关)
请指教,也许你有不同的方式来添加数据
代码示例:
LinkedList<Long> lcv = new LinkedList<Long>();
ContentResolver cr = getContentResolver();
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
Cursor c = cr.query(uri, null, null, null, null);
try {
while (c.moveToNext()) {
Uri lookupUri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI,
c.getString(c.getColumnIndex(PhoneLookup.LOOKUP_KEY)));
Cursor c2 = getContentResolver().query(lookupUri, new String[] { Contacts._ID, Contacts.DISPLAY_NAME },
null, null, null);
try {
if (c2.moveToNext()) {
Log.i(TAG, "found: " + c2.getLong(c2.getColumnIndex(Contacts._ID)) + ", " + c2.getString(c2.getColumnIndex(Contacts.DISPLAY_NAME)));
lcv.add(c2.getLong(c2.getColumnIndex(Contacts._ID)));
} else {
Log.e(TAG, "failed to lookup");
}
} finally {
c2.close();
}
}
} finally {
c.close();
}
for (Long rawid : lcv) {
Cursor c3 = cr.query(RawContacts.CONTENT_URI, null, RawContacts.CONTACT_ID + "=?", new String[] {rawid+""}, null);
if (c3.moveToNext()) {
Log.e(TAG,"aaaa: " + c3.getString(c3.getColumnIndex(Contacts.DISPLAY_NAME)));
} else {
Log.e(TAG,"errrrror");
}
ContentValues cv = new ContentValues();
cv.put(Data.RAW_CONTACT_ID, rawid + "");
cv.put(Data.MIMETYPE, MyMime.MIMETYPE);
cv.put(Data.DATA1, "mydata");
cv.put(Data.SYNC1, syncvalue);
Uri newIns = cr.insert(ContactsContract.Data.CONTENT_URI, cv);
Log.i(TAG, "insert: " + newIns + ", " + name);
}
Run Code Online (Sandbox Code Playgroud)
Man*_*hot 54
问题出在您选择Contacts._ID并使用此id填充LinkedList lcv中的数据时.
Cursor c2 = getContentResolver().query(lookupUri, new String[] { Contacts._ID, Contacts.DISPLAY_NAME },
null, null, null);
Run Code Online (Sandbox Code Playgroud)
你真的需要一个RAW_CONTACT_ID.
该DISPLAY_NAME可提取无论是从联系人database/ContactsContract.Data' OR 'database/ContactsContract.CommonDataKinds.StructuredName' OR 'database/RawContactsEntity.在后两种情况下,您将能够获取DISPLAY_NAME使用RAW_CONTACT_ID
几个关键指针:
听起来很混乱?让我尝试...
请参阅此了解更多详情.
在您的情况下获取信息的最佳方法是使用ContactsContract.RawContactsEntity(raw_contacts表与数据表的外部联接)
参考:http://developer.android.com/reference/android/provider/ContactsContract.RawContactsEntity.html
| 归档时间: |
|
| 查看次数: |
5780 次 |
| 最近记录: |