繁体   English   中英

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

[英]Integrating contact list for windows 7 phone into app

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

使用Windows Phone 7 SDK的早期版本,只能使用Choosers检索电话号码或电子邮件地址,还有更多信息。 现在,使用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; }
}

在Windows Phone OS 7.1中可行

这是有关如何访问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());
}

不幸的是,contacts API在当前版本的API中未公开。 您可以获得的最接近的是使用Tasks名称空间中的某些内容:
http://msdn.microsoft.com/en-us/library/ff428753(v=VS.92).aspx

您可以查找的两个是PhoneNumberChooseTaskEmailAddressChooserTask

另外,由于所有WP7手机都使用实时联系人进行空中同步,因此您始终可以进行网络请求并访问Windows Live Contacts API 我了解这可能不是您要查找的内容,但这可能是目前最好的选择。

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

另外,在新的Windows Phone SDK 7.1版本(即Mango)的Beta中,现在可以访问所有电话的联系人:
http://www.ginktage.com/2011/05/how-to-retreive-all-contacts-from-windows-phone-7-using-c/

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM