Часть моего приложения Xamarin Forms Android получает контакты пользователя со своего телефона в список. Метод, который получает контакты ниже.
До этого момента я импортировал файл тестовых контактов .vcf в эмулятор Android для тестирования своего приложения. Это работает правильно, и мой метод возвращает список контактов.
Однако, когда я вручную добавляю контакт в эмулятор Android, открыв приложение контактов телефона и введя новый контакт. Метод по-прежнему возвращает только контакты .vcf и не включает только что созданный мной новый контакт.
Я предполагаю, что контакты .vcf хранятся в телефоне не так, как вводимые вручную контакты. Я смотрю не в том месте, когда создаю свою проекцию?
public class PhoneContacts_Android : IPhoneContacts
{
private List<Contact> _contacts = new List<Contact>();
public List<Contact> GetContactsList()
{
if (ContextCompat.CheckSelfPermission(MainActivity.ThisActivity, Manifest.Permission.ReadContacts) == (int)Permission.Granted)
{
var uri = ContactsContract.CommonDataKinds.StructuredPostal.ContentUri;
string[] projection = {
ContactsContract.Contacts.InterfaceConsts.Id,
ContactsContract.Contacts.InterfaceConsts.DisplayName,
ContactsContract.CommonDataKinds.StructuredPostal.FormattedAddress,
ContactsContract.CommonDataKinds.StructuredPostal.Street,
ContactsContract.CommonDataKinds.StructuredPostal.City,
ContactsContract.CommonDataKinds.StructuredPostal.Region,
ContactsContract.CommonDataKinds.StructuredPostal.Postcode
};
var cursor = MainActivity.ThisActivity.ContentResolver.Query(uri, projection, null, null, null);
_contacts = new List<Contact>();
if (cursor.MoveToFirst())
{
do
{
var _contact = new Contact();
_contact.Address = new Address();
_contact.Id = (int) cursor.GetLong(cursor.GetColumnIndex(projection[0]));
_contact.DisplayName = cursor.GetString(cursor.GetColumnIndex(projection[1]));
_contact.Address.AddressLine1 = cursor.GetString(cursor.GetColumnIndex(projection[2]));
_contact.Address.AddressLine2 = cursor.GetString(cursor.GetColumnIndex(projection[3]));
_contact.Address.City = cursor.GetString(cursor.GetColumnIndex(projection[4]));
_contact.Address.State = cursor.GetString(cursor.GetColumnIndex(projection[5]));
_contact.Address.ZipCode = cursor.GetString(cursor.GetColumnIndex(projection[6]));
if (string.IsNullOrWhiteSpace(_contact.FirstName) && _contact.DisplayName != null)
{
string[] words = _contact.DisplayName.Split(' ');
_contact.FirstName = words[0];
_contact.NickName= words[0];
if (string.IsNullOrWhiteSpace(_contact.LastName))
_contact.LastName = words[1];
}
_contacts.Add(_contact);
} while (cursor.MoveToNext());
}
return _contacts;
}
else
{
ActivityCompat.RequestPermissions(MainActivity.ThisActivity, new System.String[] { Manifest.Permission.ReadContacts }, 1);
return null;
}
}
}