關(guān)于監(jiān)控?cái)z像頭拍照與攝像
由于工作中需要用到類似于像新浪微薄一樣,監(jiān)控拍照后彈出照片是否上傳分享的要求,為此就小試了下監(jiān)控拍照和攝像。
一開始沒有頭緒,都不知道搜索什么關(guān)鍵字,茫無目的下居然發(fā)現(xiàn)論壇有人推薦陳子騰寫的wiki,具體wiki鏈接如下
檢測內(nèi)置相機(jī)應(yīng)用程序新拍攝的照片和視頻片段
其實(shí)參考陳子騰的方法很容易就做好一個(gè)監(jiān)控功能了,在這里就不多說。
之所以想小寫下博文,是因?yàn)檫@種方式實(shí)際上涉及到Symbian OS提供的Publish&Subscribe這一特殊的進(jìn)程間通信機(jī)制,我之前使用的進(jìn)程間通信除了C/S和RMsgQue之外,就是使用AppUi框架通過TApaTask::SendMessage的方法來實(shí)現(xiàn),至于RProcess::SetParameter不能在進(jìn)程間實(shí)時(shí)的傳輸消息,只能是開啟進(jìn)程時(shí)傳遞一些信息(比如同步用的信號量等)。這次總算是接觸了下PS進(jìn)程間通信,就自己也嘗試了這種方式。
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.
也就是說發(fā)布者定義或更新一套屬性,然后訂閱者開啟監(jiān)聽的情況下就能接受到更新,然后可以去獲取屬性值的更改。
定義屬性
在這里最主要的是在發(fā)布者定義屬性時(shí),一定要用發(fā)布者程序的SID也就是UID3,否則會(huì)報(bào)-46的錯(cuò)誤,也即下面代碼
RProperty::Define(KPSUidCameraCfg, KCameraCfgModify, RProperty::EInt);
KPSUidCameraCfg必須是你發(fā)布程序的UID3或者你另外在mmp中定義的SID值,至于后面的KCameraCfgModify屬性和類型值就根據(jù)要求來設(shè)置了。
監(jiān)控屬性
監(jiān)控屬性需要綁定到具體的屬性然后開啟一個(gè)Subscribe的異步方法
iProperty.Attach(KPSUidCameraCfg, KCameraCfgModify);
iProperty.Subscribe(iStatus);
SetActive(); // Tell scheduler a request is active
通常監(jiān)控屬性是一個(gè)異步過程,所以我們會(huì)為其專門寫一個(gè)活動(dòng)對象類,用以異步監(jiān)控
修改屬性
雖然屬性定義是有安全性要求,但是更新屬性,就沒那么嚴(yán)格了,可以直接通過RProperty的靜態(tài)方法來修改
RProperty::Set(KPSUidCameraCfg, KCameraCfgModify, 1 );
讀取屬性
訂閱者當(dāng)收到屬性有更改時(shí),也可以直接通過RProperty的靜態(tài)方法來讀取
RProperty::Get(KPSUidCameraCfg, KCameraCfgModify, val);
刪除屬性
由于屬性值在手機(jī)重啟前會(huì)一直存在,所以屬性沒有用時(shí),我們要求將其刪除,刪除也可以通過RProperty的靜態(tài)方法簡單實(shí)現(xiàn),具體如下
RProperty::Delete(KPSUidCameraCfg, KCameraCfgModify);
結(jié)合PS這一進(jìn)程間通訊的方法和系統(tǒng)攝像頭應(yīng)用程序中的使用,我們可以顯然知道,該方法適用于開發(fā)一些通用的底層控件,可以給第三方開發(fā)者需要時(shí)監(jiān)控用,發(fā)布者類似于一個(gè)廣播系統(tǒng)。
感覺不是很復(fù)雜,就簡單小結(jié)如上吧,以后使用遇到問題再更新。
posted on 2010-12-10 19:58
frank.sunny 閱讀(3116)
評論(1) 編輯 收藏 引用 所屬分類:
symbian 開發(fā)