首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Windows 8 鎖屏提醒開發指南:Badge 徽標、背景任務聲明與更新機制

     編輯:關於.NET

前言:鎖屏是應用觸達使用者的黃金曝光位

Windows 8 引入鎖屏機制,允許最多 7 個應用在鎖屏顯示狀態。用戶可在「電腦設定」手動將應用加入鎖屏。對開發者而言,**鎖屏提醒** 是以數字 (0-99) 或系統字形 (如新訊息、播放中、暫停) 顯示於應用磁貼右下角的微型狀態指示器,極低成本即可傳達核心資訊 (未讀數、下載進度、播放狀態)。

一、鎖屏提醒架構與限制

  • 顯示位置:鎖屏介面、開始畫面磁貼右下角 (同一 Badge 物件)。
  • 內容類型:數字 `0-99` (99+ 顯示為「99+」) 或 **系統預定義字形** (`none`, `activity`, `alert`, `available`, `away`, `busy`, `newMessage`, `paused`, `playing`, `unavailable`, `error`, `attention` 等)。
  • 更新管道:本地 API (`BadgeUpdater`)、排程通知、推播通知 (WNS)、定期輪詢。
  • 前置條件**:應用必須聲明 **背景任務** 且類型包含 `Timer` (計時器)、`Push Notification` (推播) 或 `Control Channel` (控制通道) 其中之一,才能被用戶加入鎖屏槽位 (7 個名額)。

鎖屏介面示意

鎖屏應用槽位

二、聲明與設定 (Package.appxmanifest)

1. 應用程式 UI 索引標籤

  • `鎖定屏幕通知`:選擇 `徽章` (Badge) 或 `磁貼文字` (僅限 1 個應用可用)。
  • `徽章徽標`:指定 24×24 像素 `.png` 圖示 (鎖屏顯示用)。

鎖屏通知聲明

2. 宣告 索引標籤

  • 新增 `背景工作` 宣告。
  • `支援的工作類型`:勾選 **計時器**、**推播通知**、**控制通道** 至少一項 (對應應用實際背景任務實作)。
  • `應用程式設定`:輸入進入點類別 (如 `BackgroundTasks.MyBadgeUpdater`)。

背景任務宣告

三、程式碼實作:更新 Badge 徽標

命名空間

using Windows.UI.Notifications;
using Windows.Data.Xml.Dom;

顯示數字 (0-99)


// 1. 取得數字模板 XML
XmlDocument badgeXml = BadgeUpdateManager.GetTemplateContent(BadgeTemplateType.BadgeNumber);

// 2. 設定數值
XmlElement badgeElement = (XmlElement)badgeXml.SelectSingleNode("/badge");
badgeElement.SetAttribute("value", "7"); // 字串格式,範圍 0-99

// 3. 發送更新
BadgeNotification badge = new BadgeNotification(badgeXml);
BadgeUpdateManager.CreateBadgeUpdaterForApplication().Update(badge);

顯示系統字形


// 1. 取得字形模板
XmlDocument badgeXml = BadgeUpdateManager.GetTemplateContent(BadgeTemplateType.BadgeGlyph);

// 2. 設定字形值 (需符合系統預定義列表)
XmlElement badgeElement = (XmlElement)badgeXml.SelectSingleNode("/badge");
badgeElement.SetAttribute("value", "newMessage"); // 例如:新訊息圖示

// 3. 發送
BadgeUpdateManager.CreateBadgeUpdaterForApplication().Update(new BadgeNotification(badgeXml));

清除 Badge


// 方式 1:更新為 "none" 字形
badgeElement.SetAttribute("value", "none");
BadgeUpdateManager.CreateBadgeUpdaterForApplication().Update(new BadgeNotification(badgeXml));

// 方式 2:直接清除 (推薦)
BadgeUpdateManager.CreateBadgeUpdaterForApplication().Clear();

四、進階場景:背景任務定期更新

若 Badge 需反映伺服器狀態 (如未讀郵件數),需在背景任務中執行上述更新程式碼:


// BackgroundTasks/MyBadgeUpdater.cs
public sealed class MyBadgeUpdater : IBackgroundTask {
    public async void Run(IBackgroundTaskInstance taskInstance) {
        var deferral = taskInstance.GetDeferral();
        try {
            int unreadCount = await FetchUnreadCountFromServerAsync(); // 你的網路呼叫
            UpdateBadge(unreadCount);
        } finally {
            deferral.Complete();
        }
    }
    private void UpdateBadge(int count) { /* 上述更新邏輯 */ }
}

並在 `Package.appxmanifest` 宣告中設定此類別為進入點,觸發條件設為 `Timer` (如每 15 分鐘) 或 `Push Notification` (伺服器主動推送)。

五、最佳實踐與設計原則

  1. 數字 vs 字形決策:當數值可能超過 50 或頻繁變動時,**優先使用字形** (如 `newMessage`、`activity`),避免數字跳動造成視覺疲勞,且字形語意更直觀。
  2. 精準而非頻繁:Badge 更新成本極低,但推播/背景任務有配額。僅在狀態實質改變時更新 (如未讀數從 0→1、播放→暫停)。
  3. 鎖屏槽位競爭:引導使用者將應用加入鎖屏 (設定頁面提供連結 `ms-settings:lockscreen`),並在首次執行時檢查 `LockScreenManager.IsBadgeAllowed` 提示加值。
  4. 隱私考量**:Badge 內容在鎖屏公開可見,**嚴禁顯示敏感資訊** (訊息內容、姓名、金額)。僅顯示計數或抽象狀態字形。
  5. 跨裝置漫遊:Badge 狀態可透過雲端同步 (WNS 推播同步),確保多裝置一致性。

六、常見問題排查

現象可能原因解決
Badge 不顯示未聲明背景任務 / 類型錯誤檢查 Package.appxmanifest 宣告區
數字顯示 "99+"值 > 99邏輯限制最大 99,或改用字形
字形不生效值不在系統預定義列表參考 MSDN BadgeGlyphValue 列表
背景任務不執行未在鎖屏槽位 / 電池節能模式限制引導用戶加入鎖屏;優化任務耗電

總結

鎖屏提醒以 **極低開發成本 (聲明 + 幾行程式碼)** 換取 **高曝光、高觸達** 的使用者連結。核心在於:正確聲明背景任務類型、選擇「數字/字形」恰當表達狀態、在背景任務中精準更新、尊重隱私與電池壽命。掌握這套機制,讓你的應用在使用者拿起手機的第一眼,就能傳達最關鍵的資訊。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved