【问题标题】:How to Read contacts in Xamarin forms如何在 Xamarin 表单中读取联系人
【发布时间】:2016-06-22 06:37:03
【问题描述】:

我是 Xamarin 平台的初学者,并试图以 xamarin 形式阅读联系人。甚至尝试使用 Xamarin.Mobile,但它给出了很多错误。找到另外 1 个插件,即 Xamarin.contacts https://github.com/jamesmontemagno/Xamarin.Plugins/tree/master/Contacts 但没有给出相关的例子。请为所有 3 个平台使用 Xamarin.contacts 的相关示例提供帮助 在此先感谢:)

【问题讨论】:

  • 嗨,欢迎来到 StackOverflow。 Xamarin.Mobile 产生什么样的错误?您能否向我们展示一些您在使用 Xamarin.Contacts 时遇到问题的代码?
  • github上有一个例子List<Contact> contacts = null; CrossContacts.Current.PreferContactAggregation = false;//recommended contacts = CrossContacts.Current.Contacts .Where(c => !string.IsNullOrWhiteSpace(c.LastName) && c.Phones.Count > 0) .ToList();别忘了设置权限Android:android.permissions.READ_CONTACTS permission is required
  • 实际上我想在列表中显示所有联系人,但不知道在哪里添加此代码??我需要在 PCL 中添加它吗??
  • @ Will:您好,感谢您的回复。很好地使用 Xamarin.Mobile 不支持 ios,也没有在屏幕上显示任何内容,对于 android 也是如此。关于 Xamarin.Contact 我不知道我到底需要在哪里添加给定的东西
  • 看看 Xamarin.Essentials

标签: c# android ios windows-phone xamarin.forms


【解决方案1】:

请记住,Xam.Plugin.Contacts 目前处于 alpha 版本。

这是我的实现。请注意,尽管有类名,但它不是真正的 MVVM 模式。我尽可能地简化了代码以提高可读性。

MainPage.xaml

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:local="clr-namespace:Contacts" 
         x:Class="Contacts.MainPage">

    <ContentPage.BindingContext>
        <local:MainViewModel x:Name="ViewModel" />
    </ContentPage.BindingContext>

    <ListView ItemsSource="{ Binding Contacts }">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextCell Text="{ Binding DisplayName }" 
                      Detail="{ Binding Nickname }" />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>    
</ContentPage>

MainViewModel.cs

public class MainViewModel
{
    public ObservableCollection<Plugin.Contacts.Abstractions.Contact> Contacts { get; private set; }

    public MainViewModel()
    {
        this.Contacts = new ObservableCollection<Plugin.Contacts.Abstractions.Contact>();
        ReloadContacts();
    }

    public void ReloadContacts()
    {
        // Device may request user permission to get contacts access.
        var hasPermission = CrossContacts.Current.RequestPermission()
            .GetAwaiter()
            .GetResult();

        if (hasPermission)
        {
            this.Contacts.Clear();

            List<Plugin.Contacts.Abstractions.Contact> contacts = null;
            CrossContacts.Current.PreferContactAggregation = false;

            if (CrossContacts.Current.Contacts == null)
            {
                return;
            }

            contacts = CrossContacts.Current.Contacts.ToList();
            foreach (var contact in contacts)
            {
                this.Contacts.Add(contact);
            }
        }
    }
}

希望这会有所帮助。

【讨论】:

  • 仅供参考:Xam.Plugin.Contacts 不再处于开发阶段......THIS PLUGIN IS NOT UNDER DEVELOPMENT AND NOT SUPPORTEDgithub.com/jamesmontemagno/ContactsPlugin 当然,您始终可以分叉存储库并将其用作应用程序的基础。 . ;-)
猜你喜欢
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-04
相关资源
最近更新 更多