Windows 8 有快顯通知 (toast notification) 的設計,可以跳出通知來提醒使用者一些事情,但是 Windows 8 沒有像 iOS 或 Android 一樣具有通知中心 (notification center) 的設計,這會造成一個嚴重的問題是,如果使用者處於畫面鎖定時,快顯通知跳出來不久後就會消失,之後使用者完全無法知道 App 曾經跳了哪些通知。
由於不打算架設伺服器提供推播功能,App 已經實作每 15 分鐘就會執行一次背景工作,去比對有沒有新資料,如果有的話,就跳快顯通知。如果此時使用者的畫面是鎖定畫面,就可能會漏掉通知,因此打算在使用者鎖定時,就把通知關掉,等到下次使用者登入繼續使用時,再跳出快顯通知。
翻了一下,SystemConditionType 裡面有 userPresent 及 userNotPresent 兩個條件可以用,當使用者不在時,就不觸發背景工作。
用法很簡單,只要在註冊背景工作的時候加上:
var builder = new Windows.ApplicationModel.Background.BackgroundTaskBuilder();
builder.addCondition(new Windows.ApplicationModel.Background.SystemCondition(
Windows.ApplicationModel.Background.SystemConditionType.userPresent));
這樣就可以了!
另外像是如果只想要在有網路連線的時候才觸發背景工作,也可使增加 internetAvailable 條件,這樣沒有網路的時候就不會被觸發。
不過這種條件牽扯到使用者是否正在使用電腦,比較難進行測試,不知道有沒有好的方式?
關於註冊背景工作可參考:Background task sample