关于监控摄像头拍照与摄像
由于工作中需要用到类似于像新浪微薄一样,监控拍照后弹出照片是否上传分享的要求,为此就小试了下监控拍照和摄像。
一开始没有头绪,都不知道搜索什么关键字,茫无目的下居然发现论坛有人推荐陈子腾写的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这一进程间通讯的方法和系统摄像头应用程序中的使用,我们可以显然知道,该方法适用于开发一些通用的底层控件,可以给第三方开发者需要时监控用,发布者类似于一个广播系统。
感觉不是很复杂,就简单小结如上吧,以后使用遇到问题再更新。
posted on 2010-12-10 19:58
frank.sunny 阅读(3095)
评论(1) 编辑 收藏 引用 所属分类:
symbian 开发