批量添加多个联系人

时间:2011-08-19 14:42:28

标签: java android contacts android-contentprovider

我完全可以使用以下代码逐个添加联系人:

    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个联系人时 - 需要几分钟,这对我的应用来说太长了。是否有更快的方式来添加多个联系人?

2 个答案:

答案 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插入操作的相应索引。