Добавить несколько контактов в пакетном режиме - PullRequest
6 голосов
/ 19 августа 2011

Я прекрасно могу добавлять контакты по одному со следующим кодом:

    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 голосов
/ 15 января 2012

Вы можете использовать ту же функцию, что и для добавления нескольких контактов в одну пакетную операцию, внеся небольшие изменения.

Вы можете добавить до 500 операций в одну пакетную операцию, вы можете продолжать включатьобратная ссылка в операции Data Uri с соответствующим индексом операции вставки raw_contacts.

0 голосов
/ 09 сентября 2011

Почему бы не сделать 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;
    }
...