首页 > 解决方案 > 如何检索 xamarin 表单中的所有联系人列表

问题描述

我尝试使用插件Xamarin.Forms.Contacts并遵循 github 链接, https: //gist.github.com/enisn/25fd0a63a849854fb6103aa681be9963

但是,当我编译和调试时,屏幕上什么也没有显示。我也将插件添加到 Android 和 iOS 并设置了所需的权限。在GetContacts()Debugger 的第一行死掉并且没有移动到另一行。

public ContactList()
    {
        InitializeComponent();
        GetContacs();
    }

  #pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed

    async Task GetContacs()
    {
        var contacts = await Plugin.ContactService.CrossContactService.Current.GetContactListAsync();
        lstContacts.BindingContext = contacts;
    },

我还按照链接上的教程,https://www.xamboy.com/2019/10/10/getting-phone-contacts-in-xamarin-forms/ 在本教程中,我发现了权限功能的问题,调试器死了这里也是,在 if 条件下验证权限。

`public async Task<bool> RequestPermissionAsync()
    {
        contactPermissionTcs = new TaskCompletionSource<bool>();
        // Verify that all required contact permissions have been granted.
        if (Android.Support.V4.Content.ContextCompat.CheckSelfPermission(CrossCurrentActivity.Current.Activity, Manifest.Permission.ReadContacts) != (int)Permission.Granted
            || Android.Support.V4.Content.ContextCompat.CheckSelfPermission(CrossCurrentActivity.Current.Activity, Manifest.Permission.WriteContacts) != (int)Permission.Granted)
        {
            // Contacts permissions have not been granted.
            RequestContactsPermissions();
        }
        else
        {
            // Contact permissions have been granted. 
            contactPermissionTcs.TrySetResult(true);
        }

        return await contactPermissionTcs.Task;
    }`

这也没有奏效。

是否有任何建议或建议可以使我的任务更轻松?

标签: c#xamarinxamarin.formsxamarin.essentials

解决方案


从 Xamarin.Essentials1.6.0-pre5和后者开始,引入的新 APIGetAllAsync()允许您获取所有联系人。

Microsoft 文档中的示例

ObservableCollection<Contact> contactsCollect = new ObservableCollection<Contact>();

try
{
    // cancellationToken parameter is optional
    var cancellationToken = default(CancellationToken);
    var contacts = await Contacts.GetAllAsync(cancellationToken);

    if (contacts == null)
        return;

    foreach (var contact in contacts)
        contactsCollect.Add(contact);
}
catch (Exception ex)
{
    // Handle exception here.
}

它在 Android、iOS 和 UWP 上受支持,正如问题中已经提到的那样,在每个平台上添加所需的权限对于此 API 工作很重要,详细信息请参阅Xamarin.Essentials: Contacts


推荐阅读