android 2.0后,添加联系人问题 因为2.0后API改变了,添加联系人这里好多方方法已过期!现在想问一下,2.0后用改变后的API,怎么个添加新联系人跟手机号码这些呀???2.1 2.2 是不是也跟2.0的一样添加法呢?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 给你一个例子, 自己去找吧, 如果不会的话, 可以再回复我。 大家相互学习!m_cr= context.getContentResolver()Cursor cursor = m_cr.query( ContactsContract.Contacts.CONTENT_URI, null, null, null, null);//这里的ID是cursor移动到特定位置取得到的, 按顺序移动cursor, 取得每一个useridString id = cursor.getString( cursor.getColumnIndex(ContactsContract.Contacts._ID));ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); ops.add(ContentProviderOperation .newUpdate(Data.CONTENT_URI) .withSelection(Data.CONTACT_ID + "=? AND " + Data.MIMETYPE + "=?", new String[] {id, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE}) .withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, givenName) .withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, familyName) .build()); 没写完, 追加上 try { m_cr.applyBatch(ContactsContract.AUTHORITY, ops); } catch (RemoteException e) { e.printStackTrace(); } catch (OperationApplicationException e) { e.printStackTrace(); } ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, Contact_P.Name) .build()); ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) .withValueBackReference(ContactsContract.Data.CONTACT_ID, 0) .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, lcp.get(0).Name) .build()); try { getProviderContext().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); } catch (Exception e) { e.printStackTrace(); }我也有一段类似的代码,这个更接近添加功能,你那个感觉到是更新操作 private void addContacts() { ContentValues values = new ContentValues(); Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values); long rawContactId = ContentUris.parseId(rawContactUri); values.clear(); values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); values.put(StructuredName.GIVEN_NAME, "Sullivan"); values.put(StructuredName.FAMILY_NAME, "Mike"); getContentResolver().insert(Data.CONTENT_URI, values); values.clear(); values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); values.put(Phone.NUMBER, "13989297343"); values.put(Phone.TYPE, Phone.TYPE_HOME); values.put(Email.DATA, "[email protected]"); values.put(Email.TYPE, Email.TYPE_WORK); getContentResolver().insert(Data.CONTENT_URI, values); }这个应该可以 之前我测试过了 android framework (急)安装android开发环境 SDK更新了 3.0 Preview和2.3.1出来了 关于学习Android!进来指点 请教一下,关于BITMAP占用内存回收的问题。 android怎样动态生成布局文件,指定控件显示位置 【opencv for android】是否有方法可以在Service中使用javacamera. 关于activity背景设置为animation动画 开源项目 求解释 用intent切换界面时socket连接的问题 如何让任务退到后台,再整体回到前台?
m_cr= context.getContentResolver()Cursor cursor = m_cr.query(
ContactsContract.Contacts.CONTENT_URI,
null,
null,
null,
null);
//这里的ID是cursor移动到特定位置取得到的, 按顺序移动cursor, 取得每一个userid
String id = cursor.getString(
cursor.getColumnIndex(ContactsContract.Contacts._ID));
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation
.newUpdate(Data.CONTENT_URI)
.withSelection(Data.CONTACT_ID + "=? AND " + Data.MIMETYPE + "=?",
new String[] {id,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE})
.withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, givenName)
.withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, familyName)
.build());
{
m_cr.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException e)
{
e.printStackTrace();
} catch (OperationApplicationException e)
{
e.printStackTrace();
}
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, Contact_P.Name)
.build());
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, lcp.get(0).Name)
.build());
try {
getProviderContext().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
e.printStackTrace();
}我也有一段类似的代码,这个更接近添加功能,你那个感觉到是更新操作
ContentValues values = new ContentValues();
Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(rawContactUri); values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
values.put(StructuredName.GIVEN_NAME, "Sullivan");
values.put(StructuredName.FAMILY_NAME, "Mike");
getContentResolver().insert(Data.CONTENT_URI, values); values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
values.put(Phone.NUMBER, "13989297343");
values.put(Phone.TYPE, Phone.TYPE_HOME);
values.put(Email.DATA, "[email protected]");
values.put(Email.TYPE, Email.TYPE_WORK);
getContentResolver().insert(Data.CONTENT_URI, values);
}这个应该可以 之前我测试过了