關于監控攝像頭拍照與攝像
由于工作中需要用到類似于像新浪微薄一樣,監控拍照后彈出照片是否上傳分享的要求,為此就小試了下監控拍照和攝像。
一開始沒有頭緒,都不知道搜索什么關鍵字,茫無目的下居然發現論壇有人推薦陳子騰寫的wiki,具體wiki鏈接如下
其實參考陳子騰的方法很容易就做好一個監控功能了,在這里就不多說。
之所以想小寫下博文,是因為這種方式實際上涉及到Symbian OS提供的Publish&Subscribe這一特殊的進程間通信機制,我之前使用的進程間通信除了C/S和RMsgQue之外,就是使用AppUi框架通過TApaTask::SendMessage的方法來實現,至于RProcess::SetParameter不能在進程間實時的傳輸消息,只能是開啟進程時傳遞一些信息(比如同步用的信號量等)。這次總算是接觸了下PS進程間通信,就自己也嘗試了這種方式。
SDK中的描述是
Publish & Subscribe is a new API provided by the real-time kernel (EKA2). It allows publisher processes to define and update a set of properties; other processes, called subscribers, can listen for changes to a property, and get property values. The process that defines a property can specify access rights for both reading and writing. Rights can be defined in terms of either requiring a particular security capability, by a process SID, or by a process VID. Publish & Subscribe replaces System Agent and the usage of temporary Shared Data keys.
也就是說發布者定義或更新一套屬性,然后訂閱者開啟監聽的情況下就能接受到更新,然后可以去獲取屬性值的更改。
定義屬性
在這里最主要的是在發布者定義屬性時,一定要用發布者程序的SID也就是UID3,否則會報-46的錯誤,也即下面代碼
RProperty::Define(KPSUidCameraCfg, KCameraCfgModify, RProperty::EInt);
KPSUidCameraCfg必須是你發布程序的UID3或者你另外在mmp中定義的SID值,至于后面的KCameraCfgModify屬性和類型值就根據要求來設置了。
監控屬性
監控屬性需要綁定到具體的屬性然后開啟一個Subscribe的異步方法
iProperty.Attach(KPSUidCameraCfg, KCameraCfgModify);
iProperty.Subscribe(iStatus);
SetActive(); // Tell scheduler a request is active
通常監控屬性是一個異步過程,所以我們會為其專門寫一個活動對象類,用以異步監控
修改屬性
雖然屬性定義是有安全性要求,但是更新屬性,就沒那么嚴格了,可以直接通過RProperty的靜態方法來修改
RProperty::Set(KPSUidCameraCfg, KCameraCfgModify, 1 );
讀取屬性
訂閱者當收到屬性有更改時,也可以直接通過RProperty的靜態方法來讀取
RProperty::Get(KPSUidCameraCfg, KCameraCfgModify, val);
刪除屬性
由于屬性值在手機重啟前會一直存在,所以屬性沒有用時,我們要求將其刪除,刪除也可以通過RProperty的靜態方法簡單實現,具體如下
RProperty::Delete(KPSUidCameraCfg, KCameraCfgModify);
結合PS這一進程間通訊的方法和系統攝像頭應用程序中的使用,我們可以顯然知道,該方法適用于開發一些通用的底層控件,可以給第三方開發者需要時監控用,發布者類似于一個廣播系統。
感覺不是很復雜,就簡單小結如上吧,以后使用遇到問題再更新。