13. Tile, Notification, Lick Screen, Background Task

Tile

美國微軟公司2012年將發布的操作系統Windows 8,全新Metro開始界面下的那些方格,英文是Tile,中文之前有騷人墨客稱之為瓷磚,還有人叫它板磚。不過瓷磚板磚地磚和磚頭,感覺確實不如磁貼來的更傳神一些,你說呢?

無處不在的磁貼

這是個很古怪的名字,敢保證在Windows 8出現之前你不會覺得這是個IT用語,你可能會想到膏藥似的醫療用具,你也可能會想起家裡冰箱門上的那個磁性的貼牌。但在Windows 8裡面,你會再也離不開這東西,磁貼,無處不在。
Metro界面下的windows8的“色塊”磁貼

  Metro界面下的windows8的“色塊”磁貼

首先了解一下它的屬性

Arguments:它是顯示在桌面Tile上程序定制的一些信息,當通過Tile激活一個APP時,可以用該值作一些處理

BackgroundColor:Tile的背景顏色

DisplayName:類似提示信息,當用戶移到該Tile時,這個信息會顯示

ForegroundText:字體顏色,只有Dark和Light兩種

Logo:Logo圖標,當創建一個方形的瓷磚中使用的標誌形象。當你創建一個正方形或全瓷磚時,這個屬性是必需的

ShortName:這個簡短信息是直接顯示在桌面Tile上的

SmalLogo:小圖標,在查詢應用程序結果集中,就顯示該小圖標

TileId:這是一個標識瓷磚的唯一標識

TileOptions:當給予ShortName時去指定一些選項,其包括四個選項(None,ShowNameOnLogo,ShowNameOnWideLogo,CopyOnDeployment)

WideLogo:在創建寬的Tile時,設置圖片Logo

創建默認磁貼

使用Microsoft Visual Studio 11 清單編輯器創建默認磁貼(使用JavaScript 和HTML 的Metro 風格應用)
目標:若要使用已安裝的模板在Visual Studio Express 2012 RC for Windows 8中創建新項目,則需在包清單中定義默認的磁貼及其圖像。
先決條件Visual Studio Express 2012 RC for Windows 8
顯示在磁貼上的圖像文件,150 x 150 像素。
該圖像文件的較小版本,30 x 30 像素。此圖像不用於磁貼本身,而是在搜索結果、“所有程序”列表以及UI 的其他位置中使用。
推薦:該圖像文件的加寬版本為310 x 150像素。注意如果未提供加寬圖像,則除非發布你的應用的新版本,否則無法通過加寬模板更新磁貼。但是,磁貼顯示為正方形磁貼還是加寬磁貼由用戶決定。有關何時應該包括以及何時不應包括加寬圖像的詳細信息,請參閱磁貼指南和清單。

說明

1. 創建新項目。打開Visual Studio Express 2012 RC for Windows 8。
單擊“新建項目...”
如果還未打開,請單擊“新建項目”窗口左側面板中的“已安裝”。
選擇項目語言。
選擇“Windows Metro 風格”。
在“新建項目”窗口的中心窗格中,選擇“空白應用程序”。
在窗口底部為項目指定一個名稱。
單擊“確定”。
2. 打開清單編輯器如果未顯示“解決方案資源管理器”,請從“視圖”菜單中進行選擇。
雙擊“package.appxmanifest”。此時會打開“清單編輯器”窗口。
3. 提供磁貼詳細信息如果還未打開,請選擇清單編輯器的“應用程序UI”窗格。
使用你自己的徽標圖像的路徑取代默認的圖像。
選擇是否在磁貼上顯示應用的短名稱。此名稱不能超過13 個字符。如果名稱太長,將會被截斷。你可以選擇顯示徽標,顯示名稱或兩者都不顯示。
選擇名稱的文本是使用淺色字體還是深色字體(基於背景色)。
接受默認背景色,或以W3DC 顏色字符串(如“#FFFFFF”)提供自己的顏色。此背景色用於對應用的其他部分進行著色:任意應用中對話框的按鈕顏色,以及Windows 應用商店中的“應用詳情”頁。
 

Notification

WinRT(精簡的Win8)中Notification有三種類型:

Badge:徽章、標記的推送更新,主要對於磁磚進行通知

Toast:土司推送,一般是程序運行時通知

Tile:磁磚推送,自然就是程序處理休眠狀態時的通知

注意:這裡有消息內容都是以XML內容模板發送的

 

1. Push notification 簡介

何為"Push notification"? 顧名思義,"Push notification"就是"推送消息"的意思。那它和傳統的App內容更新機制有什麼區別呢?

傳統的App通過向雲端發送請求的方式來獲取更新消息,然後利用它們來更新自己的內容。Push notification是指當服務器端有更新時,服務器可以將消息推送至終端設備,不需要客戶端發送請求來獲取消息。Push notification有多種實現:iOS的消息推送機制(通過Apple Push Notification Service),Android等等。在Win8上,微軟通過WNS(windows push notification service)來實現。即服務器發送消息給微軟的WNS服務器,然後WNS把消息推送給App,讓App完成更新。

在微軟最新發布的Windows 8 Release Preview中,微軟提供了Windows Push Notification Service(WNS)來支持第三方開發人員從自己的服務器發送toast, tile和badge的更新消息給metro style app。Push notification的工作原理如下圖所示:

 

圖1:

在圖1中,包含"Windows"字樣的紫色框即為運行metro app的客戶端,它由兩部分組成:metro style app和push notification的客戶端。開發者可以將push notification客戶端集成到metro style app中去,作為app的一個單獨模塊。在下面的例子中,筆者就使用了這種方式。

包含"Cloud Service"的綠色框代表你自己的雲服務器,作用是:負責和WNS的加密驗證和發送更新消息。搭建這個服務器將是我們接下來工作的重點。

而包含"WNS"字樣的藍色框代表微軟的Push Notification服務器,它將把從Cloud Service接受到的更新消息推送給你的App客戶端。

2. Push notification 工作流程

發送一個push notification的大致流程如下:

1) Metro app向WNS請求一個push notification的channel,這一步將通過app調用WNS的接口方法得到。

2) WNS收到App的請求後,返回一個channel的URI這個URI之後會被Cloud Server使用到,用來給WNS發送POST請求。

3) App將這個URI發送給Cloud Server

4) Cloud Server向WNS發送一個HTTP 請求。這個請求是POST形式的,包含channel URI和更新的消息。(在Cloud Server和WNS之間採用OAuth2.0協議進行驗證)

5) WNS將更新消息發送給metro app,完成更新。

從上面的原理圖不難看出,WNS,即Windows Push Notification的服務器,已經由微軟實現並開始提供服務了。那麼作為第三方開發者,我們的主要任務就是實現用來接收消息的Push Notification Client(集成到metro style app中) 和Cloud Service服務器的搭建了。

3. Cloud Service 服務器的搭建

在服務器的搭建這一環節,筆者使用了微軟的IIS (Internet Information Services)和ASP.NET框架來部署這個服務器。將控制面板中的Turn Windows features on or off面板中IIS和.NET Framework選中,系統會自動進行安裝。安裝完成後,重啟計算機,然後就可以開始server端的編程內容了。

參考資料:
http://software.intel.com/zh-cn/articles/Wenxi

http://biancheng.dnbcw.info/net/395029.html



Lock Screen

 一般LockScreen的信息包括以下幾部分:

(1) 日期與時間
(2) 網絡狀態
(3)電池量
 這是最基本的幾部分,當然還有系統自動設置的鎖屏應用,如郵箱、日曆、信息等,那我們自己創建的應用如何實現呢?

 

 在這之前,先了解LockScreen的基本內容
   1、 什麼情況下需要將應用程序設置為鎖屏應用?
      鎖屏應用一般用於向用戶報告重要或有意義的消息,且消息內容簡潔實時,使用戶一瞥屏幕,就能看到最新的信息
   2、 聲明LockScreen應用能力
     在應用程序的Package.appxmanifest中需要聲明鎖屏功能和屏幕顯示的徽章,具體如下:

      

   3、在程序中可以提示用於是否將應用放置於鎖屏上,通過BackgroundExecutionManager.RequestAccessAsync()會出現一個對話框,當選擇“allow”,程序將會放置於鎖屏中,但鎖屏應用最多只能有7個,當超過七個,會詢問用戶替換哪個應用。

   我們也可以手動將瓦片程序設置為鎖屏應用:

    



Windows Phone Blog

Q&A: The new Windows Phone 8 lock screen

http://blogs.windows.com/windows_phone/b/windowsphone/archive/2012/11/02/q-amp-a-the-new-windows-phone-8-lock-screen.aspx

 

我們在使用電腦時經常會鎖屏,當我們鎖屏時,我們也可以看到一些消息,如未讀郵件數、某聊天軟件的新消息數等,這就是BackgroundTask與LockScreen之間的共同實現了~

 

Background Task

後台任務即是當應用程序處於掛起狀態時,不會影響由於程序持起而帶來的某些滯後而執行的一些後台操作,如下載文件、最新信息的推送等。當然,也應盡量減少一些沒有必要的後台操作,保證電池的壽命。

後台任務處理一般用於以下幾種情況:

1、消息推送

2、播放背景音樂

3、文件傳輸

4、共享文件  

後台任務中一般經常會使用以下一些類和方法:

1、BackgroundTaskBuilder系統註冊後台任務類

2、BackgroundTaskRegistration BackgroundTaskBuilder.Register()註冊後台任務

3、SystemTrigger一個後台任務必須有一個明確的Trigger才執行後台任務,通過SetTrigger()添加,一般Trigger的類型有以下一些類型 

Background task trigger type

Trigger event

When the background task is triggered

ControlChannelTrigger

ControlChannelTrigger

On incoming messages on the control channel.

MaintenanceTrigger

MaintenanceTrigger

It's time for maintenance background tasks.

PushNotificationTrigger

PushNotificationTrigger

A raw notification arrives on the WNS channel.

SystemEventTrigger

InternetAvailable

The Internet becomes available.

SystemEventTrigger

LockScreenApplicationAdded

An app tile is added to the lock screen.

SystemEventTrigger

LockScreenApplicationRemoved

An app tile is removed from the lock screen.

SystemEventTrigger

ControlChannelReset

A network channel is reset.

SystemEventTrigger

NetworkStateChange

A network change such as a change in cost or connectivity occurs.

SystemEventTrigger

OnlineIdConnectedStateChange

Online ID associated with the account changes.

SystemEventTrigger

ServicingComplete

The system has finished updating an application.

SystemEventTrigger

SessionConnected

The session is connected.

SystemEventTrigger

SessionDisconnected

The session is disconnected.

SystemEventTrigger

SmsReceived

A new SMS message is received by an installed mobile broadband device.

SystemEventTrigger

TimeZoneChange

The time zone changes on the device (for example, when the system adjusts the clock for daylight saving time).

SystemEventTrigger

UserAway

The user becomes absent.

SystemEventTrigger

UserPresent

The user becomes present.

TimeTrigger

TimeTrigger

A time event occurs.

4、SystemCondition

     後台任務可以設置0個或多個條件,其用來描述當達到某種條件時執行後台任務才是有意義的。通過BackgroundTaskBuilder.AddCondition()添加.

5、BackgroundTaskProgressEventHandler

      BackgroundTaskBuilder可以註冊ProgressEventHandler事件來報告UI後台執行的進度,如當下載文件事,可以報告UI當前文件下載的百分比。

6、BackgroundTaskCompletedEventArgs

     同樣註冊CompletedEventArgs事件可以在後台任務執行完後,通知UI。

7、Unregister

    通過Unregister()可以取消後台任務的註冊