将Windows 7手机的联系人列表集成到应用程序中

时间:2011-01-30 02:34:20

标签: c# windows-phone-7 xna

如何获取Windows 7手机的联系人列表,以便在win7手机应用程序中使用?

4 个答案:

答案 0 :(得分:3)

使用早期版本的Windows Phone 7 SDK,只能通过选配器检索电话号码或电子邮件地址等。现在,使用7.1 Mango SDK,可以从联系人中检索更多信息,例如AddressDisplayNameEmailAddresses等。

我将向您展示如何使用C#从Windows Phone 7检索所有联系人。

Contacts类在名称空间Microsoft.Phone.UserData中定义,并从PhoneDataSharingContext扩展,并提供了一些用于与用户的联系人数据进行交互的方法和事件。

public MainPage()
{
InitializeComponent();
Contacts objContacts = new Contacts();
objContacts.SearchCompleted += new EventHandler<ContactsSearchEventArgs>(objContacts_SearchCompleted);
objContacts.SearchAsync(string.Empty, FilterKind.None, null);
}
void objContacts_SearchCompleted(object sender, ContactsSearchEventArgs e)
{
foreach (var result in e.Results)
{
lst.Add("Name : " + result.DisplayName + " ; Phone Number : " + result.PhoneNumbers.FirstOrDefault());
}
}

Contacts还可以让用户使用SearchAsync方法搜索联系人。 FilterKind确定将用于过滤的字段,例如PhoneNumberDisplayNameEmailAddress等。如果是None,则可以列出所有联系人

请注意,我使用过模拟器,因为我目前没有Mango设备。

public partial class MainPage : PhoneApplicationPage
{
// Constructor
public MainPage()
{
InitializeComponent();
Contacts objContacts = new Contacts();
objContacts.SearchCompleted += new EventHandler<ContactsSearchEventArgs>(objContacts_SearchCompleted);
objContacts.SearchAsync(string.Empty, FilterKind.None, null);
}

void objContacts_SearchCompleted(object sender, ContactsSearchEventArgs e)
{
var ContactsData = from m in e.Results
select new MyContacts
{
DisplayName = m.DisplayName,
PhoneNumber = m.PhoneNumbers.FirstOrDefault()
};
var MyContactsLst = from contact in ContactsData
group contact by contact.DisplayName into c
orderby c.Key
select new Group<MyContacts>(c.Key, c);
longlist1.ItemsSource = ContactsData;
}
}
public class MyContacts
{
public string DisplayName { get; set; }
public ContactPhoneNumber PhoneNumber { get; set; }
}

答案 1 :(得分:2)

在Windows Phone OS 7.1中可以使用

以下是关于How To Access Contact List Data For Windows Phone

的MSDN文章

这是文章中的代码片段:

using Microsoft.Phone.UserData;

private void ButtonContacts_Click(object sender, RoutedEventArgs e)
{
    Contacts cons = new Contacts();

    //Identify the method that runs after the asynchronous search completes.
    cons.SearchCompleted += new EventHandler<ContactsSearchEventArgs>(Contacts_SearchCompleted);

    //Start the asynchronous search.
    cons.SearchAsync(String.Empty, FilterKind.None, "Contacts Test #1");
}

void Contacts_SearchCompleted(object sender, ContactsSearchEventArgs e)
{
    //Do something with the results.
    MessageBox.Show(e.Results.Count().ToString());
}

答案 2 :(得分:1)

不幸的是,联系人API未在当前版本的API中公开。最接近的是使用Tasks命名空间中的内容:
http://msdn.microsoft.com/en-us/library/ff428753(v=VS.92).aspx

您可以查找的是PhoneNumberChooseTaskEmailAddressChooserTask

或者,由于所有WP7手机都使用实时联系人通过无线方式进行同步,因此您可以随时调查执行网络请求并访问Windows Live Contacts API。我知道这可能不是你想要的,但它现在可能是最好的选择。

答案 3 :(得分:0)

您可以让用户使用PhoneNumberChooserTask(例如,SDK 7.0)从联系人列表中一次选择一个联系人:
http://msdn.microsoft.com/en-us/library/ff769543(v=vs.92).aspx#BKMK_Phone

此外,在新的Windows Phone SDK 7.1版本(又名Mango)的测试版中,现在可以访问所有手机的联系人:
http://www.ginktage.com/2011/05/how-to-retreive-all-contacts-from-windows-phone-7-using-c/

注意:我听说MS不会允许Mango开发的应用程序在2011年秋季之前发布到应用程序商店。