SideShow Gadget本地儲存實現

2021-08-23 13:31:42 字數 3869 閱讀 7308

標準的sideshow

裝置連線pc

後,由pc

上sideshow

管理中心負責向sideshow

裝置新增gadget

應用,該gadget

例項被sideshow

裝置快取到記憶體中。當sideshow

裝置未連線pc

,掉電重啟後,所有原先新增的gadget

資訊將全部丟失。

本功能的目的就是,sideshow

裝置在上述情況下重啟,可以自動恢復原先的gadget

應用。

裝置啟動後,主介面優先啟動,顯示一些本地gadget

和系統基本資訊(日期時間等)。於此同時message

元件也開始工作,全權接管和pc sideshow

相關的通訊功能,新的gadget

也就是通過該通道新增到sideshow

裝置中來,新的畫面、資訊、狀態也源源不斷由pc

向sideshow

裝置而來,此時sideshow

裝置也會根據gadget

的操作情況,主動向pc sideshow

管理中心回傳gadget

的狀態資訊(包括是否獲得焦點、按鍵資訊、選單選擇資訊等等)。

當gadget

相關資訊由pc

過來時,會先儲存到cache

中去,並不直接顯示相關畫面,ui

引擎根據需要,會隨時從cache

中獲取相關介面元素。

雖然所有的ui

資訊都快取到cache

中,但是由於顯示gadget

是乙個動態過程,是顯示引擎根據需要,動態從cache

中構建gadget

。而該需要就是message

元件通知並促成的。如果僅僅把cache

的記憶體持久化,而不啟動訊息迴圈引擎,gadget

是無法載入並應用的。

一切的根源來至於message

元件中的各種不同的訊息,所以最直接的思路就是截獲並持久化相關訊息,並在裝置啟動時(要先判斷是否聯機,如果已聯機,則不執行任何**),讀取並投送相關訊息,模擬sideshow

裝置聯機時的相關資訊互動,從而實現了gadget

非聯機狀態情況下的動態載入,由於是通過模擬訊息方式實現了gadget

的載入,所以此時gadget

的功能和聯機時無異(注意:由於沒有聯機,所以gadget

顯示的資訊和內容是非即時的)。

pc和sideshow

裝置相關的訊息共74

種,訊息結構分兩部分,一是訊息頭(包含訊息指令),二是payload

(負荷資料),我們要快取的資料也主要是這兩部分。

詳情可參見《sideshow

通訊協議》相關文件。

序號

名稱

說明1

0x010d

新增gadget 2

0x010e

刪除指定gadget 3

0x010f

刪除全部gadget 4

addcontentitem

0x0114

新增指定gadget

內容項5

deletecontentitem

0x0115

刪除指定gadget

內容項6

deleteallcontentitems

0x0116

刪除指定gadget

所有內容項

注:考慮到效能,第5

項和第6

項訊息沒有做相關的處理。

首先建立gadget

目錄(\root\cadget_cache

)每乙個gadget

應用對應乙個由其guid

,該檔案存放了gadget

的名字和圖示相關資訊;二是gadget

內容資訊,命令格式.content

。public

class

gadgetcache

詳細實現**略

**所在的檔案:pcmessagehandler.cs

case

case

packettype.addcontentitem:

case

packettype.deletecontentitem:

case

packettype.deleteallcontentitems:

(其它** 略)

**所在的檔案:pcmessagehandler.cs

中的processmessage函式 1

、啟動new

thread(new

threadstart(load_gadget)).start();

**所在的檔案:pcmessagehandler.cs

中的initialize函式 2

、資料讀取及恢復

void

load_gadget()

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

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類

sideshow sdk

自帶的sideshow

模擬器竟然不支援檔案系統,所以為了便於除錯(在硬體平台上測試是很費時間的),我又擴充套件了我的mf

模擬器,讓它也可以支援sideshow

了,不過唯一不爽的是,新增該功能後,以後所有的mf

應用程式必須要求vs2008

具有管理員許可權。

好處是我的mf

模擬器可以模擬sideshow

裝置連線和掉線,這一點官方的sideshow

模擬器是不支援的,有了這個功能,我才方便測試我的gadget

本地恢復。

這是非聯機模式,注意sideshow

介面的右上角沒有系統聯機的狀態資訊,此外,仔細看,一些非本地gadget

也出現在介面中的了,這時它們的操作和聯機一樣。

這是聯機模式,此時出現的gadget

是sideshow

控制面板選中的gadget

。注意介面的右上角出現了聯機狀態。

說明:sideshow

連線中的com

僅僅是乙個通道借用,目的是採用串列埠的操作函式進行資料讀寫,其實物理串列埠並沒有資料。標準sideshow

模擬器連線的是com33

,我的模擬器和實際裝置一致,選用的是com3

SideShow Gadget本地儲存實現

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

SideShow Gadget本地儲存實現

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

UILocalNotification本地通知

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