【问题标题】:How to retrieve all contacts list in xamarin forms如何检索 xamarin 表单中的所有联系人列表
【发布时间】:2020-05-18 03:13:10
【问题描述】:

我尝试使用插件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;
    }`

这也不起作用。

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

【问题讨论】:

  • 请在您的帖子中包含相关代码 - 不要只是链接到某些外部 repo 或博客条目
  • 关于插件,代码的主要部分仅是该行。现在,我又加了一点
  • 自述文件的第一行“此插件未在开发中且不受支持” - 3 年多未更新
  • 还有其他选择吗?
  • 您可能需要在平台代码中编写它并使用DependencyService

标签: c# xamarin xamarin.forms xamarin.essentials


【解决方案1】:

从 Xamarin.Essentials 1.6.0-pre5 和后者开始,引入的新 API GetAllAsync() 允许您抓取所有联系人。

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

【讨论】:

  • var contacts = await Contacts.GetAllAsync(cancellationToken);不适用于IOS。错误:返回设备上的联系人集合 - iOS 不可用
  • 我没有在 ios 上测试它,但它应该是支持的,如果你已经正确设置了权限并且无法正常工作,那么你可以在 Xamarin Essentials 官方 repo github.com/xamarin/Essentials/issues 中打开一个问题跨度>
猜你喜欢
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多