×
Namespaces

Variants
Actions

Qt应用如何在后台监测锁屏状态

From Nokia Developer Wiki
Jump to: navigation, search


Replace the abstract text with a short paragraph (or sentence) describing what the topic covers.

Enter article metadata as described below. Note that this template can be placed anywhere in the article. Do not remove parameters that you do not use

Article Metadata
Article
Created: ()
Last edited: hamishwillee (30 May 2013)

Contents

Introduction

Qt 没有提供在后台监测Symbian设备是否处于锁屏状态的API,用如何在Qt程序中拦截所有Symbian事件一文中提到的方法只能是程序处于Active状态时才能收到事件,本文将Detecting keypad lock/unlock status提供的Symbian方法移植到Qt应用中,为没有Symbian经验的Qt开发者提供一个Qt的解决方案。本文使用Symbian的活动对象机制使Qt应用在后台运行时,能检测到锁屏状态的变化。

实现

先在pro文件中加入symbian 设备需要用到的lib文件以及需要的能力,SwEvent能力需要Symbian签名才能安装,Symbian签名的方法可以参考Wiki:Symbian签名用户指南

Symbian{
TARGET.CAPABILITY += SwEvent
LIBS+= -lws32 -lapgrfx -lavkon
}

实现一个LockStatus的通知类,来收听事件,通过一个Observer来通知应用获得事件,CKeyPadLockStatusNotifier以及MKeyPadLockStatusObserver的实现方法参考WikiDetecting keypad lock/unlock status
使需要获得事件的Qt类中拥有CKeyPadLockStatusNotifier的对象,并继承MKeyPadLockStatusObserver类实现其中的虚方法KeyPadLockStatus()。

#include "keypadlockstatusnotifier.h"
class MainWindow : public QMainWindow,public MKeyPadLockStatusObserver
{
Q_OBJECT
 
public:
......
public:
void KeyPadLockStatus(TBool aIslocked);
......
public:
CKeyPadLockStatusNotifier* iKeyPadLockStatusNotifier ;
};

在MainWindow中初始化CKeyPadLockStatusNotifier的对象并调用start方法开始监听。

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
......
iKeyPadLockStatusNotifier = CKeyPadLockStatusNotifier::NewL(*this);
iKeyPadLockStatusNotifier->Start();
}

在方法KeyPadLockStatus中根据lock状态加入你所需的处理方法

void MainWindow::KeyPadLockStatus(TBool aIslocked)
{
//TODO: add your codes here
if(aIslocked)
{
qDebug()<<"locked";
 
}
else{
qDebug()<<"unlocked";
}
 
}

源代码下载:Media:TestLoskStatus_S.zip 测试机型:Nokia 700, 系统:Nokia Belle

参考文献

相关链接

Add categories below. Remove Category:Draft when the page is complete or near complete

This page was last modified on 30 May 2013, at 09:39.
206 page views in the last 30 days.
×