- Основы Contacts API в Android
- Введение
- Структура данных
- Работаем с контактами
- How to get contacts’ phone number in Android
- 6 Answers 6
- Not the answer you’re looking for? Browse other questions tagged android cursor or ask your own question.
- Linked
- Related
- Hot Network Questions
- Subscribe to RSS
- How to remove a contact programmatically in android
- 7 Answers 7
- Read all contacts’ phone numbers in android
- 15 Answers 15
- Где хранятся контакты на Android: обзор всех способов, как получить доступ к папке с контактами
- Место хранения контактов на Андроид
- Contacts+
- Файл с данными
- Как создать группу на рабочем столе
- Зачем нужен доступ к папке с контактами на Андроиде
- Где в памяти телефона хранятся контакты
- Сохранение контактов на сим-карте
- В Google-аккаунте
- С помощью стандартного приложения
- С помощью ПК
- Восстановление контактов через оператора мобильной связи
- Как переименовать папку на рабочем столе на Андроиде?
Основы Contacts API в Android
Введение
Начиная с версии 5 API Android SDK интерфейс работы с контактами изменился, а основной контент провайдер Contacts и все его составляющие получили черную метку @Deprecated. Теперь за работу с контактами отвечает провайдер ContactsContract. Эти изменения связаны с изменением структуры хранения контактов, более адаптированной для Android устройств, которым требуется хранить контакты из множества разных источников и предоставлять их пользователю как единую сущность. Ведь сегодня, определенный контакт на нашем мобильном устройстве это не только имя и номер телефона, мы можем захотеть сохранить eMail, Im, Twitter, Facebook аккаунт определенного человека, и при этом, мы не хотим чтобы у нас нас появилось миллион непонятных записей. Поэтому новый Contacts API позволяет Android агрегировать похожие контакты и представлять их пользователю в одной записи, а также связывать контакт с разного рода данными.
Структура данных
На устройстве основная информация о контактах хранится в трех таблицах, на деле их там конечно больше, но мы рассмотрим основные три: contacts, raw_contacts и data. Чтобы было более наглядно я набросал простую схему в Dia.
В таблице contacts хранятся агрегированные контакты, каждая запись в этой таблице представляет собой пользовательский контакт (единую сущность) – объединение одного или нескольких сырых (необработанных) контактов из таблицы raw_contacts. Как видно на схеме, связь между этими таблицами один ко многим (1-N). Одна запись в таблице raw_contacts представляет собой так называемый сырой контакт. Сырой контакт, на языке Android, означает какой-то конкретный набор данных для определенного контакта. Но сами основные данные в этой таблице не хранятся, они хранятся в таблице data, и связь между raw_contacts и data также один ко многим. В таблице data хранятся непосредственно данные. Причем каждая строка этой таблицы это набор данных определенного типа для контакта. Какого именно типа данные хранятся в строке определяется столбцом mimetype_id, в котором содержится id типов данных определенных в таблице mimetype(например vnd.android.cursor.item/name, vnd.android.cursor.item/photo). Теперь разберемся во всем по подробней и с примерами.
Работаем с контактами
Хорошо, допустим мы хотим добавить контакт (Robert Smith, моб.тел. 11-22-33), как нам это сделать? В таблицу contacts мы сами, явно, не можем добавить контакт, так как система сама формирует эту таблицу агрегируя похожие raw_contacts. Идентичность контактов система определяет в основном по имени (одинаковые имена, фамилии и т.п.), но и по другим критериям, каким именно и как ими управлять можно посмотреть в документации. То есть, если мы добавим raw_contact нашего Роберта (Robert Smith) и свяжем его с данными типа vnd.cursor.android.item/phone, а потом у нас появится “похожий”, для системы, Robert Smith связанный с данными типа vnd.cursor.android.item/email и еще один с данными типа vnd.cursor.android.item/photo, то у нас в контактах будет один Robert Smith с фотографией, мобильным и email’ом.
Теперь попробуем переложить это на код. За таблицы и их поля отвечает, как я уже говорил, класс ContactsContract и его внутренние классы и интерфейсы. Например интерфейсом к таблице raw_contacts является класс ContactsContract.RawContacts, а за таблицу data класс ContactsContract.Data. Будьте внимательны когда изучаете их константы – интерфейсы к столбцам – обращайте внимание на метки read/write и read only.
Из написанного выше следует, что для начала, мы должны добавить сырой контакт, а потом связывать его с данными. Добавить пустой контакт можно так:
В контактах у вас должен появиться пустой (Unknown) контакт, ни с чем не связанный. Добавим ему имя. Чтобы это сделать, мы должны связать наш новый контакт с новыми данными используя его id, который можно достать из прошлого запроса. Основные интерфейсы к полям таблицы данных содержаться в классе-контейнере ContactsContract.CommonDataKinds и его внутренних классах и интерфейсах. Например, сейчас нам понадобиться
класс ContactsContract.CommonDataKinds.StrucruredName содержащий нужные нам константы для добавления имени, а также константу MIME типа, которой мы пометим наше поле в таблице данных.
Если мы добавим контакт таким образом, то в списке контактов у нас появиться Robert Smith. Теперь идем дальше, добавим нашему контакту еще и телефон. Для этого нам понадобиться класс ContactsContract.CommonDataKinds.Phone, который является интерфейсом к данным телефонного номера.
Теперь в контактах у нас есть Robert Smith которому можно позвонить. Но вот так добавлять контакт и данные к нему, в несколько запросов, дорого и накладно. Поэтому существует класс ContentProviderOperation, который позволяет построить запрос, который выполнит все наши операции за одну транзакцию. Именно им и рекомендуют пользоваться. Вот так можно добавить нашего Роберта используя ContentProviderOperation.
Вот таким образом в Android можно добавлять контакты. Будьте осторожны используя ContentProviderOperation, так как слишком большой запрос может долго выполняться. Вообще все операции лучше производить в отдельном потоке, потому, что у пользователя, например, может быть слабый телефон и много контактов.
В остальном все другие операции выполняются обычным образом, используя те провайдеры, которые вам необходимы, с некоторыми оговорками. Например, удаление контакта из таблицы contacts удалит все raw_contacts с ним связанные и т.д.
Вот так можно попробовать найти нашего Роберта в контактах:
На этом хотелось бы завершить статью, все же это были только основные сведения о Contacts API в Andoid. Я надеюсь мне удалось описать здесь основные принципы, а вся конкретика зависит от того, что вам необходимо сделать в процессе работы. Можно просто руководствоваться этими принципами и находить в официальной документации интерфейсы которые вам нужны для работы. Успехов!
Источник
How to get contacts’ phone number in Android
My code is as below:
I get contacts’ name success, but get phone number fail in GetPhoneNumber() .
The phones.getCount() always equal 0.
How can I modify?
6 Answers 6
Android Contact API For 2.0
For more information see this link
You need permission like —
Then, Calling the Contact Picker
Old question but I don’t see the following answer here.
Use column index ContactsContract.CommonDataKinds.Phone.NUMBER to retreive the phone number from the cursor.
Call contact picker on any button and use the below code :
|*| Add in : AndroidManifest.xml
|*| Add in : activity_name.java
Your can add this code on your Activity class:
Not the answer you’re looking for? Browse other questions tagged android cursor or ask your own question.
Linked
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.12.3.40888
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Источник
How to remove a contact programmatically in android
I try the following code to remove contact with a specified number:
But I get this exception:
Can you please tell me how to fix my problem?
7 Answers 7
To delete all contacts use the following code:
To delete any specific contact modify the query
This is all we need. To delete Contact with phone number and name given
And remind to add read/write contact permission
Do you have the appropriate permissions declared in your manifest?
You’ll need the android.permission.READ_CONTACTS and android.permission.WRITE_CONTACTS uses-permission tags before Android will let you mess with the contacts provider:
A late answer, but maybe it helps anyway:
If you look at the source code of ContactsProvider and search for «matcher.addURI» (don’t be surprised if it stops loading in the middle. it resumes loading after a minute or two), then you see that it has a finite set of URI schemes that it can handle. It has a handler for «phones/#» but not for «phones», which is what you would need.
This means, there is just no code to delete all phone numbers, you have to get the IDs of all numbers first, and then delete each one at a time. Of course this takes a lot more CPU and memory resources, but at least it works.
The following code deletes a specific number. Please be aware that I did not test this code, but it is 90% identical to the code I use to delete all numbers of a given person, which needs similar treatment beacause Android can’t delete «people/#/phones» but «people/#/phones/#»
EDIT: I just realized that I misunderstood the question. I thought you would like to delete the phone number, which my code does. But now I see you want to delete the contanct.
The code is a bit verbose because it makes two assumptions:
- there could be multiple lines to delete (e.g. the number is stored twice)
- it might be unsafe to get a cursor, delete a row, and keep using the cursor
Both assumptions are handled by first storing the idsToDelete in an ArrayList and then deleting.
Источник
Read all contacts’ phone numbers in android
I’m using this code to retrieve all contact names and phone numbers:
However, this will only return the primary number for each contact, but I want to get the secondary numbers as well. How can i do this?
15 Answers 15
Following code shows an easy way to read all phone numbers and names:
NOTE: getContentResolver is a method from the Activity context.
You can read all of the telephone numbers associated with a contact in the following manner:
Please note that this example (like yours) uses the deprecated contacts API. From eclair onwards this has been replaced with the ContactsContract API.
This code shows how to get all phone numbers for each contact.
In case it helps, I’ve got an example that uses the ContactsContract API to first find a contact by name, then it iterates through the details looking for specific number types:
You can get all phone contacts using this:
check complete example HERE.
800 contacts, the codes in this answer run for 89 ms, but the other way (query for contact id then phone numbers for each id) used 23 000 ms !
You can get all the contact all those which have no number and all those which have no name from this piece of code
One thing can be done you have to give the permission in the manifest for contact READ and WRITE After that you can create the model class for the list which can be use to add all the contact here is the model class
In the same way just get their other numbers using the other «People» references
Accepted answer working but not given unique numbers.
See this code, it return unique numbers.
This one finally gave me the answer I was looking for. It lets you retrieve all the names and phone numbers of the contacts on the phone.
I fixed my need belove
Note: After giving permissions at manifest some mobile phones can deny if so you need to go Settings—> Applications—> find your application click on it and turn On the permissions needed
Load contacts in background using CursorLoader:
Here’s how to use ContentsContract API to fetch your contacts in your Phone Book. You’ll need to add these permissions in your AndroidManifest.xml
Then, you can run this method to loop through all your contacts.
Here’s an example to query fields like Name and Phone Number, you can configure yourself to use CommonDataKinds, it query other fields in your Contact.
Code to get contact name (Ascending order) and number
Источник
Где хранятся контакты на Android: обзор всех способов, как получить доступ к папке с контактами
Место хранения контактов на Андроид
Данные телефонной книги смартфона могут храниться в двух местах и бывают двух совершенно разных видов. Первый – это записи в аккаунтах приложений, в которых есть адресная книга или ее аналог. Второй – электронный документ, сохраненный во внутренней памяти телефона и содержащий в себе абсолютно все имеющиеся на устройстве и в подключенных к нему учетных записях контакты. Пользователи чаще интересуются именно им, но мы расскажем о каждом из доступных вариантов.
Contacts+
Плюс в названии этой программы находится не зря: она представляет собой настоящий комбайн. Управление контактными данными реализовано в духе подобных приложений: отдельные поля для телефонного номера и ID мессенджеров, возможность установить мелодию и изображение на отдельные контакты, просмотр вызовов или СМС от того или иного абонента. Продвинутый инструментарий включает в себя суперполезную опцию объединения дубликатов.
Присутствуют и возможности резервного копирования телефонной книги и блокирования нежелательных вызовов. Фишкой приложения является кастомизация: можно сменить как иконку, так и тему внешнего вида. Ложкой дёгтя в бочке достоинств Контактс+ можно назвать рекламу и ограничения бесплатной версии. Это решение уже для продвинутых пользователей, остальным его функционал может показаться избыточным.
Файл с данными
Помимо сведений в адресных книгах стандартного и сторонних приложений, которые разработчики хранят на собственных серверах или в облаках, существует и общий для всех данных файл, доступный для просмотра, копирования и изменения. Называется он contacts.db или contacts2.db, что зависит от версии операционной системы или оболочки от производителя, или установленной прошивки. Правда, найти его и открыть не так просто – чтобы добраться к его фактическому месту расположения необходимы root-права, а для просмотра содержимого (на мобильном устройстве или компьютере) – SQLite-менеджер.
База данных contacts как раз и является тем файлом, который чаще всего ищут пользователи. Его можно использовать в качестве резервной копии адресной книги или в ситуации, когда требуется восстановить все сохраненные контакты. Последнее особенно актуально в случаях, когда разбит экран смартфона или планшета, или когда устройство полностью неработоспособно, а доступ к учетной записи, содержащей адресную книгу, отсутствует. Так, имея на руках этот файл, его можно открыть для просмотра или переместить на другой девайс, получив таким образом доступ ко всем сохраненным контактам.
Итак, если на вашем мобильном устройстве имеются root-права и установлен поддерживающий их файловый менеджер, для получения файла contacts.db или contacts2.db выполните следующее:
Примечание: В нашем примере используется ES Explorer, поэтому в случае использования другого приложения-проводника, некоторые действия могут немного, но не критически отличаться. Также, если ваш файловый менеджер уже имеет доступ к рут-правам, первые четыре шага следующей инструкции можно пропустить.
-
- Запустите файловый менеджер и, если это первое использование, ознакомьтесь с представленной информацией и нажмите «Вперед».
-
- Откройте главное меню приложения – делается это свайпом слева направо или нажатием на вертикальные полосы в левом верхнем углу.
-
- Активируйте функцию Root-проводник, для чего нужно перевести в активное положение тумблер напротив одноименного пункта.
-
- Затем нажмите «Разрешить» во всплывающем окне и убедитесь в том, что приложению предоставлены необходимые права.
Примечание: Иногда после предоставления рут-прав файловому менеджеру необходимо завершить его работу в принудительном порядке (через меню многозадачности), а затем повторно запустить. В противном случае приложение может не отображать содержимое интересующей нас папки.
-
- Снова откройте меню файлового менеджера, пролистайте его вниз и выберите в разделе «Локальное хранилище» пункт «Устройство».
-
- В открывшемся перечне каталогов поочередно перейдите в папки с одинаковыми названиями – «data».
-
- Если потребуется, измените стиль отображения папок на список, затем пролистайте его немного вниз и откройте директорию «com.android.providers.contacts».
-
- В ней перейдите к папке «databases». Внутри нее и будет расположен файл contacts.db или contacts2.db (напомним, название зависит от прошивки).
-
- Файл можно открыть для просмотра как текст,
но для этого потребуется специальный SQLite-менеджер. Например, у разработчиков Root Explorer есть такое приложение, и они предлагают его установить из Play Маркета. Правда, данное средство просмотра содержимого баз данных распространяется на платной основе.
- Файл можно открыть для просмотра как текст,
Теперь, когда вы знаете фактическое месторасположение контактов на Android-устройстве, точнее, где хранится содержащий их файл, можете его скопировать и сохранить в безопасное место. Как уже было сказано выше, открыть и отредактировать файл можно с помощью специального приложения. Если же вам необходимо перенести контакты с одного смартфона на другой, просто поместите этот файл по следующему пути:
После этого все ваши контакты будут доступны к просмотру и использованию на новом девайсе.
Как создать группу на рабочем столе
В процессе использования Android-гаджета на него устанавливают большое количество разнообразных по назначению приложений (мессенджеры, файловые менеджеры, игры и т.д.). Из-за этого искать в огромном списке программ конкретную утилиту очень сложно и долго. Поэтому часто владельцы смартфонов группируют их на дисплее гаджета по назначению. Да порядок на экране телефона – это тоже говорит многое о пользователе.
Для этого требуется проделать следующее:
- Вывести на рабочий экран ярлыки софта. Для этого в списке программ нажимают и удерживают ярлык утилиты, пока они не будут отображаться на рабочем экране.
- Далее следует перетянуть иконку программы на другую утилиту (в приведенном примере – это интернет-браузер и интернет-мессенджер), чтобы сформировалась папка с двумя этими приложениями. Потом можно добавлять также в нее другие ярлыки интернет-приложений. При этом лучше назвать ее по типу программ. Например, можно назвать ее «интернет» или «мультимедиа».
- При необходимости любые ярлычки можно убрать из этой папки. Требуется просто нажать на нее, чтобы она развернулась. После чего перетащить из нее ненужные ярлыки на экран. При необходимости их можно быстро удалить с экрана.
Зачем нужен доступ к папке с контактами на Андроиде
Постоянное совершенствование и появление новых типов сотовых девайсов предполагает их частую смену. При этом есть необходимость сохранить все старые данные. Где хранятся номера телефонов в Андроиде и как их перенести в память нового аппарата, зависит от желания и потребностей пользователя.
Контакты на Андроиде
Конечно, их можно перенести на SIM-карту, но не вся информация сохранится корректно. Нужно помнить, что к каждому номеру имеется полная информация, включающая:
- фамилию, имя, отчество;
- фото;
- второй и последующие номера телефонов;
- должность и место работы;
- день рождения или другие памятные даты;
- E-mail.
Утеря любой из них может принести неудобство. Избежать этого поможет специальный системный файл, то есть, все контакты можно целиком расположить в отдельной папке.
Где в памяти телефона хранятся контакты
Процесс сохранения номера на телефоне Андроид выглядит очень просто. После ввода контактных данных пользователю необходимо лишь перейти в опции и нажать кнопку «Добавить контакт». Далее система предложит заполнить небольшую анкету об абоненте, но от этого можно спокойно отказаться.
Если человек сохраняет номер в память телефона, то найти файл контактов можно следующим образом:
- Открыть «Проводник» (приложение для просмотра файлов).
- Перейти в папку «data».
- Открыть следующую папку «com.android.providers.contacts».
- Кликнуть на «databases».
В указанном месте будет находиться файл формата .db. Как правило, он получает имя «contacts» или «contacts2». В нем хранятся все номера, которые пользователь сохранил на телефона.
Если вам не удалось найти файл по указанному пути, попробуйте сначала открыть в проводнике папку «Android», а уже затем – «data».
Без специального приложения отредактировать файл не получится. Но изменения автоматически будут вступать в силу, как только владелец смартфона изменит параметры контакта через записную книжку.
Сохранение номера в память телефона – самый популярный способ добавить новый контакт. Но он не единственный. Наряду с ним пользователи сохраняют абонентов на SIM-карту и добавляют в персональный аккаунт Google. О том, как получить доступ к файлу в таком случае, поговорим далее.
Сохранение контактов на сим-карте
Старый добрый способ, работающий еще со времен кнопочных «Нокий». Несмотря на свою миниатюрность, сим-карта — это настоящий мини-компьютер с процессором, оперативной памятью, постоянной и перезаписываемой памятью. Именно в перезаписываемую память записываются и стираются контакты.
При хранении информации на сим-карте сразу возникает вопрос: а сколько контактов вмещает сим-карта? Количество у всех отличается, но в целом диапазон от 100 до 200 контактов.
- На сим-карте Tele2 можно хранить только 100 контактов;
- На сим-карте «Мегафон» помещается 200 номеров телефона;
- На сим-карте «Билайн» также 200;
- В старые сим-карты МТС входит 250 номеров, в новые не более 200.
Теперь вы знаете, сколько номеров вмещают сим-карты разных операторов. Конечно, этого объема недостаточно для современного активного человека — по статистике, в телефонных книгах хранится в среднем по 1000 контактов. Сюда входят и нежелательные контакты: для них тоже нужно выделить место, чтобы идентифицировать и не брать трубку, добавить в черный список.
В Google-аккаунте
Все смартфоны на операционной системе Android имеют уже предустановленные сервисы Гугл. Даже при первом включении устройства система требует создать новый аккаунт для доступа ко всем возможностям гаджета. Подобная процедура даже входит в список основных услуг, которые предоставляются в салонах связи за деньги. Но любой пользователь может справиться с задачей и без помощи специалиста.
Создание учетной записи приводит к тому, что перед владельцем смартфона открывается огромное разнообразие функций, в числе которых есть добавление контактов в Google-аккаунт. Понадобиться это может для того, чтобы не потерять записи после поломки смартфона или с целью просмотра абонентов на компьютере.
Импорт номеров в учетную запись можно выполнить через приложение «Контакты». Пользователю потребуется открыть настройки, нажать кнопку «Импорт» и выбрать подходящий способ выполнения операции. Это может быть импорт с SIM-карты, ели номера записаны на нее, или из памяти телефона при помощи VCF-файла.
Как только контакты будут импортированы, с ними можно будет ознакомиться через аккаунт Google:
- Открываем настройки телефона.
- Выбираем раздел «Аккаунты».
- Нажимаем на «Google».
- Переходим в раздел «Контакты».
Также все записанные номера, которые есть в аккаунте Гугл, но отсутствуют в памяти телефона, будут отображаться в стандартном приложении «Контакты».
С помощью стандартного приложения
Необязательно искать скрытый архив, расположенный в системной папке. Любому пользователю доступен экспорт телефонных номеров через встроенное или стороннее приложение телефонной книги:
- Запустите софт и откройте меню «Еще».
- Перейдите в «Настройки», там щелкните по «Импорт/экспорт». Функция может находиться в списке «Еще» или входить в состав вкладки «Управление контактами».
- Выберите «Экспорт контактов».
- Отметьте номера для копирования и отметьте, куда их перенести.
- Список сохранится в формате .vcf.
Это файл можно найти через компьютер и редактировать его, используя программы:
- Windows Contacts, Microsoft Outlook/Express, Mozilla Thunderbird, vCardOrganizer, Eudora OSE, Open Contacts;
- Address Book на компьютерах и ноутбуках под управлением MacOS.
Программа Mozilla Thunderbird.
ПО открывает информацию об абоненте, включая имя, номер и установленную фотографию. Некоторые утилиты показывают дату создания номера в телефонной книге.
С помощью ПК
Этот метод рассчитан на тех, у кого:
- получены Root-права;
- есть механическое повреждение девайса, из-за чего нельзя воспользоваться двумя способами, описанными выше.
- Подключить устройство к ПК через USB-кабель.
- Скачать и распаковать ADB в корневую директиву диска с Windows.
- Зайти в папку, куда были распакованы файлы. В строке сверху, где указан путь к директиве, задайте cmd и нажмите «Enter».
- Появится окно с командной строкой. Теперь пропишите adb -d shell.
- На смартфоне должна быть установлена база данных sqlite Ее также можно добавить через ADB, соответствующие инструкции есть в интернете.
- Теперь задайте команду — sqlite3 /data/data/com.android.providers.contacts/databases/contacts.db или contactsdb, когда первый вариант не сработал.
- Введите select * from view_contacts, чтобы просмотреть номера из телефонной книги.
Этот метод позволяет посмотреть данные и копировать их в отдельный файл на компьютере. Оттуда информацию можно запаковать в .vcf файл с помощью одной из вышеописанных программ и добавить на другой гаджет используя стандартное приложение.
Восстановление контактов через оператора мобильной связи
Вернуть контакты можно через провайдера мобильной связи. У каждого оператора имеется функция детализации расхода средств. Используя ее можно собрать номера телефонов за любой период времени. Заказать детализацию можно в личном кабинете.
Способ рабочий, но трудоемкий. Фактически их придется собирать вручную и забивать в телефон.
Большой минус в том, что номера будут обезличены и придется прозванивать каждый.
В мобильной версии наоборот, будут только имена без номера.
Как переименовать папку на рабочем столе на Андроиде?
В стандартной оболочке каталоги создаются по легкой и продуманной инструкции. Необходимо перетащить иконку приложения на иную. В результате раздел автоматически создается. После этого можно добавлять остальные ярлыки.
Изначально собранные утилиты идут без индивидуального названия, его должен придумать пользователь. Для этой цели нужно выполнить такие манипуляции:
- Папка открывается посредством одного нажатия.
- Нажимается выбранная категория.
- Появится клавиатура.
Пользователь redmi note 7 в любое время может нажать на пустое место на дисплее смартфона. Палец необходимо подержать на меню около секунды. Появится дополнительное меню, состоящее из нескольких пунктов.
Нажимается место сбора утилит. После этого можно дать ему название и подтвердить данное действие. Папка автоматически появится на рабочем столе, ее можно заполнять иконками.
Источник