0

我参考了这个博客来列出电话联系人。另外,我已经按照这个线程实现了使用DependencyService将联系人添加到电话簿。

我的问题是在将联系人添加到设备电话簿后,我需要获取所有最新联系人。另外,我需要在联系人列表视图中显示新联系人。

作为参考,我创建了一个示例项目并在此处上传。在此示例中,首先我列出了顶部带有“添加新”选项的电话联系人。如果我们点击Add New,将打开一个新页面,其中包含Add to Contact选项和电话号码条目。输入电话号码后单击添加到联系人选项,然后设备电话簿页面将显示输入的电话号码。

在这个阶段,用户可能会或可能不会将该号码保存到设备电话簿中。因此,当用户恢复到应用程序时,我需要获取整个联系人并检查电话号码是否已添加到设备电话簿中。如果添加了联系人,我将隐藏“添加到联系人”选项,否则我将再次显示该选项。同时当用户返回联系人列表时,我需要在那边显示新添加的联系人。

为此,我在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。所以我不知道如何直接获取它。有没有办法获取此页面上的所有联系人?

4

1 回答 1

1
//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);
});
于 2021-07-02T07:56:37.730 回答