Я сохраняю около 250 контактов в телефонной книге. И каждый контакт занимает около 1 секунды, чтобы сохранить в списке контактов. В моем приложении мне может понадобиться сохранить более 10 000 контактов. Тогда потребуется несколько часов, чтобы спасти их. Итак, я хочу способ, чтобы быстро сохранить все контакты. Ваш ответ мне очень поможет:)
Вот метод, который я использую с циклом for для сохранения контакта -
public static String saveNewContact(String name, String number, ContentResolver contentResolver){
ContentValues values = new ContentValues();
values.put(Contacts.People.NUMBER, number);
values.put(Contacts.People.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM);
values.put(Contacts.People.LABEL, name);
values.put(Contacts.People.NAME, name);
Uri dataUri = contentResolver.insert(Contacts.People.CONTENT_URI, values);
Uri updateUri = Uri.withAppendedPath(dataUri, Contacts.People.Phones.CONTENT_DIRECTORY);
values.clear();
values.put(Contacts.People.Phones.TYPE, Contacts.People.TYPE_MOBILE);
values.put(Contacts.People.NUMBER, number);
updateUri = contentResolver.insert(updateUri, values);
return getContactID(updateUri, contentResolver);
}
public static String getContactID(Uri contactUri, ContentResolver contentResolver){
String id = "";
Cursor cursor = contentResolver.query(contactUri, null,
null, null, null);
if (cursor != null && cursor.moveToFirst()) {
int idx = cursor.getColumnIndex(ContactsContract.Contacts._ID);
id = cursor.getString(idx);
}
return id;
}
EDIT - пробовал и этот код, но результаты те же
ArrayList<ContentProviderOperation> cntProOper = new ArrayList<>();
int contactIndex = cntProOper.size();
cntProOper.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).build());
cntProOper.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.RawContacts.Data.RAW_CONTACT_ID, contactIndex)
.withValue(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name)
.build());
cntProOper.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, contactIndex)
.withValue(ContactsContract.RawContacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, number)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE).build()); //Type like HOME, MOBILE etc
try {
contentResolver.applyBatch(ContactsContract.AUTHORITY, cntProOper);
} catch (RemoteException | OperationApplicationException exp) {}