SideShow Gadget本地儲存實現

2021-09-22 04:06:09 字數 2788 閱讀 6107

1、說明

標準的sideshow裝置連線pc後,由pc上sideshow管理中心負責向sideshow裝置新增gadget應用,該gadget例項被sideshow裝置快取到記憶體中。當sideshow裝置未連線pc,掉電重啟後,所有原先新增的gadget資訊將全部丟失。

本功能的目的就是,sideshow裝置在上述情況下重啟,可以自動恢復原先的gadget應用。

2、sideshow功能模組關係圖

sideshow裝置啟動後,主介面優先啟動,顯示一些本地gadget和系統基本資訊(日期時間等)。於此同時message元件也開始工作,全權接管和pc sideshow相關的通訊功能,新的gadget也就是通過該通道新增到sideshow裝置中來,新的畫面、資訊、狀態也源源不斷由pc向sideshow裝置而來,此時sideshow裝置也會根據gadget的操作情況,主動向pc sideshow管理中心回傳gadget的狀態資訊(包括是否獲得焦點、按鍵資訊、選單選擇資訊等等)。

當gadget相關資訊由pc過來時,會先儲存到cache中去,並不直接顯示相關畫面,ui引擎根據需要,會隨時從cache中獲取相關介面元素。

3、gadget本地儲存實現

3.1、實現思路

雖然所有的ui資訊都快取到cache中,但是由於顯示gadget是乙個動態過程,是顯示引擎根據需要,動態從cache中構建gadget。而該需要就是message元件通知並促成的。如果僅僅把cache的記憶體持久化,而不啟動訊息迴圈引擎,gadget是無法載入並應用的。

一切的根源來至於message元件中的各種不同的訊息,所以最直接的思路就是截獲並持久化相關訊息, 並在裝置啟動時(要先判斷是否聯機,如果已聯機,則不執行任何**),讀取並投送相關訊息,模擬sideshow裝置聯機時的相關資訊互動,從而實現了gadget非聯機狀態情況下的動態載入,由於是通過模擬訊息方式實現了gadget的載入,所以此時gadget的功能和聯機時無異(注意:由於沒有聯機,所以gadget顯示的資訊和內容是非即時的)。

3.2、具體實現

3.2.1 訊息結構簡介

pc和sideshow裝置相關的訊息共74種,訊息結構分兩部分,一是訊息頭(包含訊息指令),二是payload(負荷資料),我們要快取的資料也主要是這兩部分。

詳情可參見《sideshow通訊協議》相關文件。

注:考慮到效能,第5項和第6項訊息沒有做相關的處理。

3.2.3 本地儲存格式

首先建立gadget目錄(\root\cadget_cache)

3.2.4 gadget持久化類**

public

class

gadgetcache  

詳細實現** 略

**所在的檔案:pcmessagehandler.cs

3.2.5 gadget持久化執行**

case

case

packettype.addcontentitem:  

case

packettype.deletecontentitem:  

case

packettype.deleteallcontentitems:  

(其它** 略)

**所在的檔案:pcmessagehandler.cs 中的processmessage函式

3.2.6 gadget本地資料讀取及恢復

1、啟動

new thread(new threadstart(load_gadget)).start();

**所在的檔案:pcmessagehandler.cs 中的initialize函式

2、資料讀取及恢復

void load_gadget()  

processmessage(gadgetcache.toauxmessage(269, bytdata));  

string 

contentids

= gadgetcache

foreach (string contentid in contentids)  

processmessage(gadgetcache.toauxmessage(276, bytdata));  

}  }  

gadgetcache.runflag

= false

;  globals.yfshowinfo("end", "load_gadget", globals.yfinfotype.level_8);  

}  }  

catch  

}  **所在的檔案:pcmessagehandler.cs 中的pcmessagehandler類

4、其它說明

sideshow sdk自帶的sideshow模擬器竟然不支援檔案系統,所以為了便於除錯(在硬體平台上測試是很費時間的),我又擴充套件了我的mf模擬器,讓它也可以支援sideshow了,不過唯一不爽的是,新增該功能後,以後所有的mf應用程式必須要求vs2008具有管理員許可權。

好處是我的mf模擬器可以模擬sideshow裝置連線和掉線,這一點官方的sideshow模擬器是不支援的,有了這個功能,我才方便測試我的gadget本地恢復。

這是非聯機模式,注意sideshow介面的右上角沒有系統聯機的狀態資訊,此外,仔細看,一些非本地gadget也出現在介面中的了,這時它們的操作和聯機一樣。

這是聯機模式,此時出現的gadget是sideshow控制面板選中的gadget。注意介面的右上角出現了聯機狀態。

說明:sideshow連線中的com僅僅是乙個通道借用,目的是採用串列埠的操作函式進行資料讀寫,其實物理串列埠並沒有資料。標準sideshow模擬器連線的是com33,我的模擬器和實際裝置一致,選用的是com3。

SideShow Gadget本地儲存實現

標準的sideshow 裝置連線pc 後,由pc 上sideshow 管理中心負責向sideshow 裝置新增gadget 應用,該gadget 例項被sideshow 裝置快取到記憶體中。當sideshow 裝置未連線pc 掉電重啟後,所有原先新增的gadget 資訊將全部丟失。本功能的目的就是,...

SideShow Gadget本地儲存實現

1 說明 標準的sideshow裝置連線pc後,由pc上sideshow管理中心負責向sideshow裝置新增gadget應用,該gadget例項被sideshow裝置快取到記憶體中。當sideshow裝置未連線pc,掉電重啟後,所有原先新增的gadget資訊將全部丟失。本功能的目的就是,sides...

UILocalNotification本地通知

通知和應用是分別處理的,應用程式排程了通知之後,即便被關掉,仍然能夠在指定的排程時間被觸發。通常在使用本地通知時,是在應用程式退出到後台時來排程的。應用程式退出到後台之後,會在記憶體中駐留10分鐘的時間,過了10分鐘之後,系統會自動清理應用程式,1.通常本地通知是在退出應用程式時,被排程的,在後台往...