编程实现针对S60手机的自动开机
S60手机的Clock可以设置闹钟,时间到时会自动开机报警,完了询问是否开机。
我测了一下它是用"Alarm Server"实现的,因此想法是自己向"Alarm Server"写一个"Clock Alarm",这就等于编程设计了闹钟。缺陷是如果用户选"否"那就没办法了。
下面的代码参考自:
http://db.cs.helsinki.fi/~mraento/lxr/source/ContextSensors/src/log_alarm.cpp
已经在S60 SDK 2.1的仿真器上测试通过。
// .mmp
//...
LIBRARY ealwl.lib
// .cpp
#include <t32alm.h> // for RAlarmServer
// ...
RAlarmServer iAlarmServer; // forgive me
TInt err = iAlarmServer.Connect();
if(err==KErrNone)
{
CleanupClosePushL(iAlarmServer);
TAlarmInfo info;
TAlarmSetState state;
TInt i, err=-1;
/* 打开这段注释则设置了一个闹钟
TTime t; // target time
TFileName f; // sound file name
iAlarmServer.SetClockAlarm(0, t, f, f, EAlarmClockOnce);
*/
// 下面这段代码检索已设置的闹钟
CAlarmIdArray* ids = new(ELeave) CAlarmIdArray(8);
CleanupStack::PushL(ids);
iAlarmServer.AlarmArrayPopulateL((*ids), RAlarmServer::EArrayNext, 8);
for (i=0; i<ids->Count(); i++)
{
TInt id = ids->At(i);
err=iAlarmServer.AlarmInfo(info, RAlarmServer::EInfoById, id);
if (err==KErrNone )
{ // query the clock alarm info
state=iAlarmServer.AlarmState(info.iAlarmId);
if (state!=EAlarmNotSet && state!=EAlarmDisabled)
break;
}
}
CleanupStack::PopAndDestroy(); // ids
CleanupStack::PopAndDestroy(); // iAlarmServer
}
我测了一下它是用"Alarm Server"实现的,因此想法是自己向"Alarm Server"写一个"Clock Alarm",这就等于编程设计了闹钟。缺陷是如果用户选"否"那就没办法了。
下面的代码参考自:
http://db.cs.helsinki.fi/~mraento/lxr/source/ContextSensors/src/log_alarm.cpp
已经在S60 SDK 2.1的仿真器上测试通过。
// .mmp
//...
LIBRARY ealwl.lib
// .cpp
#include <t32alm.h> // for RAlarmServer
// ...
RAlarmServer iAlarmServer; // forgive me
TInt err = iAlarmServer.Connect();
if(err==KErrNone)
{
CleanupClosePushL(iAlarmServer);
TAlarmInfo info;
TAlarmSetState state;
TInt i, err=-1;
/* 打开这段注释则设置了一个闹钟
TTime t; // target time
TFileName f; // sound file name
iAlarmServer.SetClockAlarm(0, t, f, f, EAlarmClockOnce);
*/
// 下面这段代码检索已设置的闹钟
CAlarmIdArray* ids = new(ELeave) CAlarmIdArray(8);
CleanupStack::PushL(ids);
iAlarmServer.AlarmArrayPopulateL((*ids), RAlarmServer::EArrayNext, 8);
for (i=0; i<ids->Count(); i++)
{
TInt id = ids->At(i);
err=iAlarmServer.AlarmInfo(info, RAlarmServer::EInfoById, id);
if (err==KErrNone )
{ // query the clock alarm info
state=iAlarmServer.AlarmState(info.iAlarmId);
if (state!=EAlarmNotSet && state!=EAlarmDisabled)
break;
}
}
CleanupStack::PopAndDestroy(); // ids
CleanupStack::PopAndDestroy(); // iAlarmServer
}