我完全可以使用以下代码逐个添加联系人:
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).build());
ops.add(ContentProviderOperation
.newInsert(Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, 0)
.withValue(Data.MIMETYPE,
CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.GIVEN_NAME, "Hello")
.withValue(StructuredName.FAMILY_NAME, "World").build());
try {
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OperationApplicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
然而,当我尝试逐个添加大约500个联系人时 - 需要几分钟,这对我的应用来说太长了。是否有更快的方式来添加多个联系人?
答案 0 :(得分:0)
为什么不让arraylist成为一个可以从任何活动中访问的全局,我不会将其插入到Bundle中,因为当你这样做时会发生更多事情,它只是为了传递少量信息。我会这样做,确保也在清单中调用它。
public class MyStates extends Application {
private ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
public ArrayList getList() {
return this.blueToothAdapter;
}
public void setList(ArrayList<ContentProviderOperation> o) {
this.ops= o;
}
答案 1 :(得分:0)
通过进行少量修改,您可以使用与单个批处理操作中添加多个联系人相同的功能。
您可以向单个批处理操作添加最多500个操作,您可以继续在Data Uri操作中包含反向引用以及raw_contacts插入操作的相应索引。