一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

WM有約II(六):分級限制

等級制度

  在上一集里,我們把發送查詢短信息的人分為"聯系人"和"陌生人"兩大類,應用程序會自動回復"聯系人",忽略"陌生人",在這一集里,我們將會引入另外兩種類型:"白名單"和"黑名單"。如果你看過上一集,你應該知道"聯系人"和"陌生人"是互斥的,它們之間的區別是手機號碼是否存在聯系人里。"白名單"和"黑名單"是在"聯系人"上發展出來的兩個細分類型,它們也是互斥的,"白名單"允許執行所有查詢,而"黑名單"則禁止執行所有查詢。至于"陌生人",我們將會給它一個"注冊"的機會,讓它可以請求把自己加到聯系人里。這四個等級將會通過AccessLevel枚舉來表達:

代碼 1

  在這一集里,我們將會在這個"等級制度"的基礎上實現如下效果:

訪問級別

允許執行的操作

Whitelist

PingStatus、PingSchedule

Contact

PingStatus

Stranger

SignUp

Blacklist

N/A

如何界定訪問級別?

  首先,發送方要么在聯系人里,要么不在,如果不在,那么他/她的訪問級別就是Stranger,如果在,我們還要看看他/她是否在白名單或者黑名單里,如果也在,那么他/她的訪問級別就是Whitelist或者Blacklist,否則就是Contact。就實現方式而言,我們應該優先考慮檢查白名單和黑名單,因為從集合的角度來看,它們均是聯系人的子集,如果發送方在任一名單里,我們就可以立即返回他/她的訪問級別,而不必遍歷所有聯系人,于是,我們可以這樣獲取發送方的訪問級別:

代碼 4

  那么,查詢操作的訪問級別又如何獲取呢?我們知道,應用程序(目前)只支持三種查詢操作,每種操作所需的最低訪問級別如下表所示:

查詢操作

所需的最低訪問級別

PingStatus

Contact

PingSchedule

Whitelist

SignUp

Stranger*

請把我加為好友……

  下面,我們將會實現SignUp操作。首先,我們要定義這個操作的短信息,很明顯,它包含的數據將用于創建Outlook聯系人,最低限度應該提供姓名和手機號碼:

{Trombone:SignUp(Leehom,Wang,13813572468)}

  用戶界面也需要做出相應調整:

圖 11

  這個用戶界面僅向用戶收集姓名,那么,我們如何獲取本機的號碼?你可以通過P/Invoke調用SmsGetPhoneNumber函數,也可以像我這樣,使用OpenNETCF的Smart Device Framework。下載、安裝Smart Device Framework 2.3,添加對OpenNETCF.Phone.dll的引用,接著就是修改Ping按鈕的代碼了(原本的代碼參見《WM有約II(四):你明天有空嗎?》的代碼14):

代碼 7

  好了,運行一下看看效果:

圖 12

  再來看看Cellular Emulator,很好,注冊短信息順利發出了:

圖 13

  接下來就是注冊短信息的處理了,因為它只針對陌生人,而且無需自動回復,所以我們不必遵守SmsProcessorBase類的套路,直接讓SignUpProcessor類實現ISmsProcessor接口就可以了。在實現SignUpProcessor.Process方法之前,我們需要一個輔助方法來提取注冊短信息里的數據:

代碼 8

  因為注冊短信息的處理需要用戶的參與,用戶有權決定把發送方添加到聯系人還是忽略他/她,所以應用程序應該把截獲的注冊短信息添加到某個隊列里,以便用戶過后查詢和處理,避免用戶在應用程序截獲注冊短信息時不得不馬上處理的尷尬情景。為此,我們需要一個RegistrationQueue來暫存待處理的注冊請求,由于每個注冊請求都包含了接收時間、姓名和手機號碼,于是我們用一個Registration類來存放這些數據:

代碼 9

  由于這些數據有可能跨越多個應用程序會話,于是我們需要把它們持久化到文件里,這里我還是選擇使用XML:

代碼 10

  因為RegistrationQueue的實現和InterceptionHistory(參見《WM有約II(五):區別對待不同的手機號碼》)相似,所以我就不在這里一一細說了。

  回到SignUpProcessor.Process方法,在截獲注冊短信息時,我們需要判斷發送方是否陌生人,若是,把相關數據添加到RegistrationQueue,否則,忽略該注冊短信息。另外,我們還需要在InterceptionHistory里等級本次截獲:

代碼 11

  最后,我們需要為此配備一個用戶界面:

圖 14

  當應用程序啟動時,我們要把RegistrationQueue綁定到上面的DataGrid:

代碼 12

  當DataGrid上選中的行發生改變時,下面的兩個TextBox的內容要更新為當前選中行的姓名:

代碼 13

  當用戶單擊Add按鈕時,應用程序將會用當前選中的注冊信息來創建Outlook聯系人,創建完畢后將會把注冊信息從RegistrationQueue里刪除:

代碼 14

  而當用戶單擊Remove按鈕時,應用程序將會直接把當前選中的注冊信息從RegistrationQueue里刪除。

好了,又到了測試的時候了(在測試之前,別忘了把SignUpProcessor掛接到InterceptorManager里!),通過Cellular Emulator發送如下注冊短信息:

{Trombone:SignUp(Leehom,Wang,13813572468)}

圖 15

現在,我們把注意力集中到模擬器上:

圖 16

從上圖可以看到,注冊短信息已被成功截獲,單擊Add按鈕,應用程序將會用選中的注冊信息創建Outlook聯系人:

圖 17

此時,如果我們通過Cellular Emulator使用剛才的手機號碼發送如下查詢短信息:

{Trombone:PingStatus}

將會收到應用程序的自動回復:

圖 18

而主界面上的截獲歷史也能正確顯示發送方的姓名了:

圖 19

你還想要什么?

  有一次,我和一個六年級的學生一起看動畫片,當我們看到正義的代表向怪獸發動反擊時,我問他:"你現在看到這種情節還會覺得體內有一股激動在奔流嗎?"他說沒有。曾幾何時,當我們碰到可以使用新技術的機會時,我們也會異常激動……

  或許,在很多人的眼里,技術只不過是用來解決問題的工具罷了,然而,我更傾向于通過學習/使用技術尋找樂趣。下一集,要不我們試一下db4o吧,然后,再試一下Windows Mobile上的Notification,就是當你收到短信息時屏幕下面彈出的提示框……

NET技術WM有約II(六):分級限制,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 美女黄色免费网站 | 最新国产福利在线观看 | 99爱在线精品视频免费观看9 | 久久视热这只是精品222 | 91久久亚洲国产成人精品性色 | 久草视频手机在线观看 | 国产成人精品亚洲午夜麻豆 | 小说专区图片专区 | 午夜视频免费看 | 亚洲伦理一二三四 | 玖玖爱视频在线观看 | 狠狠做五月深爱婷婷天天综合 | 亚洲一区二区三区四区在线观看 | 精品91一区二区三区 | 欧美wwwxxx| 国产精品自在自线亚洲 | 黄色免费观看 | 国产精品麻豆一区二区三区v视界 | 精品国产中文字幕 | 成人性a激情免费视频 | 久久久久久岛国免费网站 | 国产在线播放免费 | 国产中出视频 | xxxxx在线观看 | 97精品久久天干天天蜜 | 国产 麻豆 欧美亚洲综合久久 | 狠狠色丁香婷婷久久综合不卡 | 伊人精品线视天天综合 | 久久午夜夜伦伦鲁鲁片 | 午夜国产福利 | 国产精品女人在线观看 | 91视频一88av| 午夜黄大色黄大片美女图片 | 美女色黄 | 天天摸天天看天天爽 | 精品91自产拍在线 | 国产精品福利午夜h视频 | 丁香五六月婷婷 | 婷婷激情片 | www.一区| 手机在线观看黄色网址 |