如何获取Windows 7手机的联系人列表,以便在win7手机应用程序中使用?
答案 0 :(得分:3)
使用早期版本的Windows Phone 7 SDK,只能通过选配器检索电话号码或电子邮件地址等。现在,使用7.1 Mango SDK,可以从联系人中检索更多信息,例如Address
,DisplayName
,EmailAddresses
等。
我将向您展示如何使用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
确定将用于过滤的字段,例如PhoneNumber
,DisplayName
或EmailAddress
等。如果是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
您可以查找的是PhoneNumberChooseTask和EmailAddressChooserTask。
或者,由于所有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年秋季之前发布到应用程序商店。