Где хранятся контакты на Android: местоположение

Сейчас мы с вами разберемся где на Андроиде хранятся контакты из вашей телефонной кники, а так же различных приложений (Skype, Viber, Телеграм и прочее).

Данная статья подходит для всех брендов, выпускающих телефоны на Android 11/10/9/8: Samsung, HTC, Lenovo, LG, Sony, ZTE, Huawei, Meizu, Fly, Alcatel, Xiaomi, Nokia и прочие. Мы не несем ответственности за ваши действия.

Внимание! Вы можете задать свой вопрос специалисту в конце статьи.

Контакты в гаджетах Андроид могут располагаться в совершенно разных местах: аккаунты приложений и электронный документ. Давайте рассмотрим все эти варианты хранения контактов.

Где сохраняются контакты на Самсунг?

Резервное копирование контактов на SD-карту

  1. На любом главном экране нажмите «Приложения».
  2. Коснитесь Настройки.
  3. Прокрутите до «ПРИЛОЖЕНИЯ», затем нажмите «Контакты».
  4. При необходимости коснитесь «Контакты», чтобы отобразить> Все контакты.
  5. Коснитесь Импорт / Экспорт.
  6. Коснитесь Экспорт на SD-карту.
  7. Проверьте имя файла для списка контактов во всплывающем сообщении.
  8. Нажмите ОК, чтобы подтвердить экспорт.

Процесс работы с данными в контактах

запрос данных

Возьмем DefaultContactBrowseListFragment в главном интерфейсе в качестве примера, отношения наследования такие, как показано

, как показано ниже:

Процесс загрузки данных интерфейса List, унаследованного от ContactEntryListFragment, выглядит следующим образом:

CursorLoader создается и управляется LoaderManager во фрагменте. Фрагмент содержит объект ContactEntryListAdapter. Конфигурация параметров CursorLoader помещается в ContactEntryListAdapter. После загрузки данных CursorLoader он вызывается обратно Исходя из фрагмента, а затем используйте ContactEntryListAdapter для управления обновлением данных и контроля пользовательского интерфейса

Адаптером, соответствующим DefaultContactBrowseListFragment, является DefaultContactListAdapter, а соответствующим курсором загрузки является ProfileAndContactsLoader.

Другие операции

Создание, обновление и удаление контактов обычно инкапсулируются в классе ContactSaveService, как показано на рисунке.

Класс ContactSaveService наследуется от IntentService и является службой для асинхронной обработки контактных данных. После завершения операции с данными намерение передается при запросе операции (намерение содержит действие, которое требует обратного вызова) И действие) обратный вызов в Activity для уведомления UIThread для выполнения обновления пользовательского интерфейса

Возьмем пример создания контакта:

метод ContactEditorFragment.save ()

CreateSaveContactIntent () в ContactSaveService, передавая параметры, необходимые для обратного вызова

ContactSaveService, saveContact ()

может выполнять обратный вызов Activity, поскольку базовый класс ContactsActivity Activity, связанный с операцией контакта, в Contact реализует ContactSaveService.Listener, а затем в onCreate ContactSaveService.registerListener (this), а затем с помощью вышеупомянутого Логика кода в конечном итоге вызовет

Как мне сохранить все мои контакты в Google?

Резервное копирование и синхронизация контактов устройства

  1. На телефоне или планшете Android откройте приложение «Настройки».
  2. Коснитесь Службы учетной записи Google. Синхронизация контактов Google. Также синхронизируйте контакты устройства. Автоматическое резервное копирование и синхронизация контактов устройства.
  3. Включите автоматическое резервное копирование и синхронизацию контактов устройства.
  4. Выберите учетную запись, в которой вы хотите сохранить контакты.

Анализ базы данных

База данных системных контактов находится в следующих папках данных \ data \ com.android.providers.contacts \ базы данных \, обычные контакты хранятся в contacts2.db, а личная информация хранится в profile.db, но базовая структура обеих баз данных одинакова

Структура таблицы

Есть еще три важные таблицы: учетная запись, mimetype, данные, raw_contacts, контакты. Другие структуры таблиц используются реже. При возникновении проблем перейдите в ContactsProvider для просмотра кода.

Основная прямая связь между несколькими таблицами

Аккаунт связан с аккаунтом

В таблице данных хранится информация о контакте. В каждой строке хранится информация определенного типа для контакта (например, телефон, имя, адрес электронной почты, учетная запись социальной сети, адрес и т. д.).

Где данные хранятся в dataX (x — это число), в соответствии с mimetype_id этой строки, чтобы соответствовать типу информационных данных, таблица mimetype хранит несколько типов данных и _id, как показано на рисунке

соответствует коду, вы можете перейти к исходному коду через некоторые из следующих классов, чтобы увидеть, что mimetype и dataX являются соответствующими отношениями

Например:

Для других классов, пожалуйста, обратитесь к следующему определению

[java] view plaincopy

  1. String MIMETYPE_EMAIL_V2 = Email.CONTENT_ITEM_TYPE;//»vnd.android.cursor.item/email_v2?;
  2. String MIMETYPE_IM = Im.CONTENT_ITEM_TYPE;//»vnd.android.cursor.item/im»;
  3. String MIMETYPE_NICKNAME = Nickname.CONTENT_ITEM_TYPE;//»vnd.android.cursor.item/nickname»;
  4. String MIMETYPE_ORGANIZATION = Organization.CONTENT_ITEM_TYPE;//»vnd.android.cursor.item/organization»;
  5. String MIMETYPE_PHONE_V2 = Phone.CONTENT_ITEM_TYPE;//»vnd.android.cursor.item/phone_v2?;
  6. String MIMETYPE_SIP_ADDRESS = SipAddress.CONTENT_ITEM_TYPE;//»vnd.android.cursor.item/sip_address»;
  7. String MIMETYPE_NAME = StructuredName.CONTENT_ITEM_TYPE;//»vnd.android.cursor.item/name»;
  8. String MIMETYPE_POSTAL_ADDRESS_V2 = StructuredPostal.CONTENT_ITEM_TYPE;//»vnd.android.cursor.item/postal-address_v2?;
  9. String MIMETYPE_IDENTITY = Identity.CONTENT_ITEM_TYPE;//»vnd.android.cursor.item/identity»;
  10. String MIMETYPE_PHOTO = Photo.CONTENT_ITEM_TYPE;//»vnd.android.cursor.item/photo»;
  11. String MIMETYPE_GROUP_MEMBERSHIP = GroupMembership.CONTENT_ITEM_TYPE;//»vnd.android.cursor.item/group_membership»;
  12. String MIMETYPE_NOTE = Note.CONTENT_ITEM_TYPE;//»vnd.android.cursor.item/note»;
  13. String MIMETYPE_WEBSITE = Website.CONTENT_ITEM_TYPE;//»vnd.android.cursor.item/website»;

Ниже приведены представления в базе данных (некоторые инкапсуляции совместных запросов), некоторые из которых были помечены.

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

Два основных класса в ContactsProvider:

com.android.providers.contacts.ContactsDatabaseHelper

com.android.providers.contacts.ContactsProvider2

ContactsDatabaseHelper наследуется от SqliteOpenHelper, это операция создания и обновления базы данных, этот класс содержит подробные определения полей и типов данных каждой таблицы, а также обновления базы данных и контактов в соответствии с версией Оператор инкапсуляции данных CURD данных человеческой части, предоставляемый вызову ContactsProvider2

ContactsProvider2 наследуется от AbstractContactsProvider и представляет собой протокол для передачи данных между приложениями и базами данных. Доступ к нему осуществляется через Uri и определяет метод CURD, который необходимо использовать приложениям.

Редактировать интерфейс

Редактировать интерфейс В ContactEditorActivity-> ContactEditorFragment процесс загрузки данных в интерфейсе аналогичен описанному выше. Более сложным является пользовательский интерфейс интерфейса редактирования, который представляет собой пользовательский RawContactEditorView. И обязательная блок-схема

Фрагмент содержит пользовательский объект представления RawContactEditorView и объект данных RawContactDeltaList, после запроса данных Contact из базы данных данные инкапсулируются в RawContactDeltaList, а затем RawContactDeltaList через bindeditors, метод editor.setState Данные передаются в пользовательское представление, затем RawContactEditorView разделяет данные, а затем передает каждое подпредставление, а также передает RawContactDeltaList, и затем обновление данных будет завершено в подпредставлении, когда контакт должен быть сохранен во фрагменте. , Вы можете напрямую использовать RawContactDeltaList, операция сохранения контактов аналогична описанному выше процессу взаимодействия с данными.

Функция импорта и экспорта

Эта функция вызывается кнопкой меню на главном интерфейсе.

Импорт с SIM-карты

будет вызывать com.android.phone от Telephony. ADMList расширяет ADNList, отвечает за процесс загрузки данных, SimContacts — за обработку логики пользовательского интерфейса, все очень просто.

Импорт из хранилища

Импортировать файл vcard в ImportVCardActivity. Сначала он получает файл .vcf в пространстве хранения через VCardScanThread, а затем предлагает пользователю выбрать файл vcf для импорта и кэшировать данные через VCardCacheThread. Инкапсулируйте типы данных, необходимые для импорта данных. Конкретный процесс импорта выполняется через bind VCardService. В службе ExecutorService (инициализированный как однопоточный пул потоков) используется для выполнения потока ImportProcessor (реализует Runable). ImportProcessor выполняет специальный анализ и импорт. ImportProcessor Во время инициализации будет передан NotificationImportExportListener для выполнения обратного вызова интерфейса после завершения импорта.

Экспорт на карту памяти

Экспортирует контакты в файл vcf и сохраняет их в области хранения. Процесс экспорта аналогичен процессу импорта, а также выполняется с использованием VCardService.

Подробный интерфейс

В коде AndroidL нет предыдущих контактных данных в пакете сведений, оставлены только некоторые вспомогательные инструменты, а вместо ContactDetailActivity используется QuickContactActivity, а в пользовательском интерфейсе также происходят значительные изменения. , Интерфейс скользящий, внешний слой — это пользовательский вид: com.android.contacts.widget.MultiShrinkScroller. Если вы недавно связались с контактом, номер контакта будет указан сразу под номером контакта, Включая звонки и текстовые сообщения, а затем другую информацию. Если имеется несколько данных каждого типа, по умолчанию отображается одна из них. Она будет развернута при нажатии «Просмотреть все».
z

При входе из списка контактов он находится в полноэкранном режиме, а при входе из других каналов (в настоящее время известен по SMS и ярлыкам на рабочем столе) — не в полноэкранном состоянии, которое контролируется MultiShrinkScroller (runEntranceAnimation )

Загрузка данных аналогична процессу загрузки, описанному выше.

Основной интерфейс

Основным интерфейсом является интерфейс PeopleActivity, который разделен на две вкладки, а именно DefaultContactBrowseListFragment и ContactTileListFragment, которые можно переключать с помощью viewpager

Где DefaultContactBrowseListFragment — это страница списка контактов, в основном используемая для обработки отображения загрузки и поиска контактов в списке контактов, процесс загрузки данных описан выше, представление элемента списка — ContactListItemView

ContactTileListFragment является избранным контактом и общим контактом, этот класс напрямую наследуется от Fragment, но процесс в основном такой же, как и раньше, метод немного отличается, данные делятся на избранные контакты и последние контакты Контакты, через ContactTileLoaderFactory, чтобы обеспечить загрузчик курсора для загрузки различных данных

На дисплее пользовательского интерфейса адаптер используется для управления отображением частых и частых контактов, 3 строки и одна строка часто

В правом нижнем углу самого верхнего слоя основного интерфейса есть кнопка создания контакта, нажмите непосредственно для входа в интерфейс создания контакта.

В верхней части находится панель инструментов с кнопкой поиска и клавишей меню.

Основной интерфейс также отслеживает изменения данных поставщика

Выберите интерфейс

Интерфейс Pick — это ContactSelectionActivity, который будет загружать разные фрагменты в соответствии с различными действиями, включая ContactPickerFragment.

PhoneNumberPickerFragment

EmailAddressPickerFragment

PostalAddressPickerFragment

JoinContactListFragment

Чаще всего используются первые 3 фрагмента

ContactSelectionActivity обычно запускается startActivityForResult, поэтому ему необходимо вернуть результат до его завершения.

Процесс загрузки данных пропущен.

Рейтинг
( 2 оценки, среднее 4.5 из 5 )
Понравилась статья? Поделиться с друзьями: