Какой API можно использовать для импорта контактов в Android 14?

У меня есть текстовый файл, содержащий номера телефонов и имена людей. Можете ли вы подсказать, существуют ли готовые решения для импорта этих данных в записную книжку? Если таких решений нет, есть ли метод, который можно вызвать из Android-приложения для выполнения импорта контактов? Я могу написать парсер на C#/Python/Pascal.
  • 12 марта 2025 г. 18:24
Ответы на вопрос 2
Для импорта контактов в Android 14 можно использовать `ContactsContract` API. Этот API позволяет взаимодействовать с адресной книгой телефона, добавлять, обновлять и удалять контакты. 

Вот основные шаги, которые вам нужно будет выполнить, чтобы реализовать импорт контактов из текстового файла в Android-приложении:

1. **Считывание данных**: Используйте язык программирования для парсинга текстового файла и извлечения имен и телефонных номеров. Это можно сделать на Python, C# или любом другом удобном для вас языке.

2. **Запрос разрешений**: Перед тем как добавить контакты, убедитесь, что ваше приложение имеет необходимые разрешения. Для этого добавьте в `AndroidManifest.xml` следующие строки:
   ```xml
   <uses-permission android:name="android.permission.WRITE_CONTACTS" />
   <uses-permission android:name="android.permission.READ_CONTACTS" />
   ```

   Также не забудьте запросить разрешения у пользователя в рантайме, если ваше приложение работает на Android 6.0 и выше.

3. **Использование ContentResolver для добавления контактов**:
   Вот пример кода на Java, который демонстрирует, как можно добавить контакт в адресную книгу:

   ```java
   ContentValues values = new ContentValues();
   values.put(ContactsContract.RawContacts.CONTENT_TYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
   
   Uri rawContactUri = getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values);
   long rawContactId = ContentUris.parseId(rawContactUri);
   
   // Добавляем номер телефона
   values.clear();
   values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "номер_телефона");
   values.put(ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID, rawContactId);
   values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
   getContentResolver().insert(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, values);
   
   // Добавляем имя
   values.clear();
   values.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "Имя_человека");
   values.put(ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID, rawContactId);
   getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
   ```

4. **Автоматизация импорта**: Проходите по всем извлеченным контактам и создавайте для каждого из них записи в адресной книге.

### Готовые решения
Существует множество готовых библиотек для работы с контактами на Android, но чаще всего их использование связано с более сложными задачами, которые требуют дополнительных функций. Если вам нужна простая реализация, то использование `ContactsContract` будет самым оптимальным решением.

### Примечания
- Убедитесь, что ваше приложение корректно обрабатывает ошибки и исключения, связанные с добавлением контактов.
- Также подумайте над тем, как обрабатывать дубликаты записей (если контакт с таким номером уже существует в адресной книге).

Если у вас есть вопросы о конкретных частях кода или реализации, не стесняйтесь задавать их!
Написать парсер на C#/Python/Pascal смогу.
"Контакты" умеют подтягивать данные из vCard .
По идее, это обычные текстовые файлы, так-что по факту весь "парсер" будет просто построчно читать ваш файл и записывать в новый с "обёрткой" в виде структуры (разобрана по ссылке). После чего достаточно "открыть" файлы на телефоне.
p.s. К тому-же, я уверен, что как минимум для Python и C# будут сторонние библиотеки для работы с форматом.
Похожие вопросы