我参考了这个博客,列出了电话联系人。此外,我已经按照此线程使用DependencyService将联系人添加到电话簿中。
我的问题是,在将联系人添加到设备电话簿后,我需要获取所有最新联系人。此外,我需要在联系人列表视图中显示新联系人。
为了参考,我创建了一个示例项目并上传到这里。在这个示例中,首先我列出了电话联系人,顶部有添加新选项。如果我们点击添加新,将打开一个新页面,其中包含"添加到联系人">选项和输入电话号码。输入电话号码后,单击添加到联系人选项,然后设备电话簿页面将显示输入的电话号码。
在这个阶段,用户可以将该号码保存到设备电话簿,也可以不保存。因此,当用户恢复使用该应用程序时,我需要获取整个联系人,并检查电话号码是否添加到设备电话簿中。如果添加了联系人,我将隐藏添加到联系人选项,否则我将再次显示该选项。在用户返回联系人列表的同时,我需要在那里显示新添加的联系人
为此,我在App.xaml.cs上添加了一条消息,并在AddContactPage中订阅。
应用程序.xaml.cs
protected override void OnResume()
{
// Handle when your app resumes
MessagingCenter.Send(this, "isContactAdded");
}
添加联系人页面
MessagingCenter.Subscribe<App>(this, "isContactAdded", (sender) =>
{
//How I can fetch the entire latest contacts here
//After fetching conatcts only I can check the new phone number is added to the device phonebook
});
联系人作为参数从MainActivity传递到App.xaml.cs。所以我不知道如何直接获取它。有什么方法可以获取这个页面上的所有联系人吗?
//loading all the new contacts
protected async override void OnResume()
{
if (Utility.isContactAdding)
{
UserDialogs.Instance.ShowLoading("");
List<Contact> contacts = await contactsService.RetrieveContactsAsync() as List<Contact>;
MessagingCenter.Send<App, List<Contact>>(App.Current as App, "isContactAdded", contacts);
}
}
//Comparing the new contacts with phone number
MessagingCenter.Subscribe<App, List<Contact>>(App.Current, "isContactAdded", (snd, arg) =>
{
Device.BeginInvokeOnMainThread(() =>
{
Utility.ContactsList.Clear();
phone = Regex.Replace(phone, @"[^0-9+]+", "");
bool isContactExist = false;
var AllNewContacts = arg as List<Contact>;
foreach(var item in AllNewContacts)
{
if (item.PhoneNumbers.Length != 0)
{
foreach(var number in item.PhoneNumbers)
{
if (number.Replace("-", "").Replace(" ","") == phone)
{
isContactExist = true;
}
}
}
Utility.ContactsList.Add(item);
}
if (isContactExist)
{
Phonebook_layout.IsVisible = false;
MessagingCenter.Send<CallHistoryDetailPage>(this, "refreshcontacts");
}
else
{
Phonebook_layout.IsVisible = true;
}
Utility.isContactAdding = false;
UserDialogs.Instance.HideLoading();
});
});
//Subscribed message and refershing the contacts
MessagingCenter.Subscribe<CallHistoryDetailPage>(this, "refreshcontacts", (sender) =>
{
BindingContext = new ContactsViewModel(Utility.myContacts);
});