如何在Xamarin forms中读取联系人

4
我是Xamarin平台的初学者,正在尝试在Xamarin Forms中读取联系人。甚至尝试使用Xamarin.Mobile,但它会产生很多错误。找到了另外一个插件,即Xamarin.contacts https://github.com/jamesmontemagno/Xamarin.Plugins/tree/master/Contacts,但没有给出相关示例。请帮忙提供一个使用Xamarin.contacts的相关示例,适用于所有3个平台。谢谢!

1
你好,欢迎来到StackOverflow。Xamarin.Mobile产生了什么样的错误?您能展示一下使用Xamarin.Contacts时遇到的一些代码问题吗? - Will
在 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 - Nitro.de
实际上,我想要在列表中显示所有联系人,但不知道在哪里添加这段代码?我需要将其添加到 PCL 中吗? - Rajeshree
@ Will:你好,谢谢你的回复。使用Xamarin.Mobile不支持iOS,并且在屏幕上也没有显示任何内容,安卓也是一样。至于Xamarin.Contact,我不知道应该在哪里添加给定的东西。 - Rajeshree
请查看Xamarin.Essentials。 - Andrey Golubev
1个回答

3

请记住,Xam.Plugin.Contacts目前处于测试版。

这是我的实现。请注意,尽管使用了类名,但这并不是真正的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);
            }
        }
    }
}

希望这有所帮助。

FYI:Xam.Plugin.Contacts已不再开发... 此插件未在开发中且不受支持:https://github.com/jamesmontemagno/ContactsPlugin 当然,您可以随时fork该repo并将其用作应用程序的基础...;-) - SushiHangover

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接