DCSIMG
Get ready for Windows Phone 7.5 – Part 7.1 – Calendar and Contacts query - Essential WPF

Get ready for Windows Phone 7.5 – Part 7.1 – Calendar and Contacts query

בפוסט הקודם דיברתי על Scheduled Task והראתי כיצד ליצור תהליך שרץ ברקע בזמן שהאפליקציה שלנו אינה רצה בקדמה. ראינו והשוונו בין שני סוגי תהליכי רקע: Periodic ו- Resource Intensive.
 
בחלק ראשון של פוסט זה, אסביר כיצד לתשאל את מאגר ה- Contacts של הטלפון. בחלק השני אסביר כיצד לתשאל את ה- Calendar.
 
Contacts
בגירסת מנגו החדשה יש יכולת לתשאל את מאגר ה- Contacts של הטלפון לקריאה בלבד, ובכך לעשות שימוש במידע כדי להציג מידע זה בצורה שונה  או לנצל מידע זה למטרות שונות.
הרעיון המרכזי הוא גישה לאובייקט Contacts וביצוע פעולות חיפוש אסינכרוניות מולו.
 
נניח לרגע שהאפליקציה הבאה שלכם היא אפשרות חיפוש Contact בעזרת סרגל אותיות. לחיצה על אות מציגה את רשימת ה- Contacts שמתחילים באות זו.
 
Screen1Screen2
 
להלן קטע קוד שמדגים כיצד לבצע שאילתה אל מול Contacts:
 
Code Snippet
  1. var phoneContacts = new Contacts();
  2. phoneContacts.SearchCompleted += phoneContacts_SearchCompleted;
  3. phoneContacts.SearchAsync(string.Empty, FilterKind.DisplayName, null);
 
Code Snippet
  1. void phoneContacts_SearchCompleted(object sender, ContactsSearchEventArgs e)
  2. {
  3.     foreach (var contact in e.Results)
  4.     {
  5.         char firstLetter = contact.DisplayName.FirstOrDefault();
  6.         List<PhoneContact> letterContacts;
  7.         if (!_allContacts.TryGetValue(firstLetter, out letterContacts))
  8.         {
  9.             letterContacts = new List<PhoneContact>();
  10.             _allContacts.Add(firstLetter, letterContacts);
  11.         }
  12.         var phoneContact = new PhoneContact(contact);
  13.         letterContacts.Add(phoneContact);
  14.     }
  15. }
 
בקטע קוד המצורף, ניתן לראות שכל מה שצריך לעשות כדי לתשאל את ה- Contacts זה ליצור אובייקט חדש מסוג Contacts ואז להפעיל מטודה SearchAsync עם פרמטר שאומר מה לחפש, ובאיזה אופן. במקרה שלנו אנו מעונינים בכל ה- Contacts ולכן העברתי string.Empty. אפשר במקום להעביר רק אות או מחרוזת מתוך DisplayName או מתוך תכונה אחרת של ה- Contact אותה נציין כפרמטר שני, בעזרת enum: FilterKind.
 
כתוצאות החיפוש מוכנות, נורה האירוע SearchCompleted, כאן אני מבצע cache של החיפוש כדי לא להפעיל את החיפוש בכל פעם מחדש כשהמשתמש לוחץ על אות.
כדי לא לצרוך זכרון מיותר, יצרתי מחלקה חדשה בשם PhoneContact שמכילה רק את ה- DisplayName והתמונה. אותם משכתי מתוך אובייקט ה- Contact.
 
Code Snippet
  1. public class PhoneContact
  2. {
  3.     public PhoneContact(Contact contact)
  4.     {
  5.         this.DisplayName = contact.DisplayName;
  6.         var stream = contact.GetPicture();
  7.         if (stream != null)
  8.         {
  9.             Picture = PictureDecoder.DecodeJpeg(stream);
  10.         }
  11.     }
  12.     public string DisplayName { get; set; }
  13.     public ImageSource Picture { get; set; }
  14. }
 
 
בחלק הבא אציג כיצד לתשאל את היומן.
Published Tuesday, October 04, 2011 11:56 PM by Tomer Shamam

Comments

No Comments

Leave a Comment

(required) 
(required) 
(optional)
(required) 

Enter the numbers above:
Powered by Community Server (Commercial Edition), by Telligent Systems