The Environment Change Notifier informs an application about changes
in the system environment. The class that implements the API is CEnvironmentChangeNotifier
, which is an
active object. The following changes are notified:
Change of system locale
System time passes midnight
System time changes
Death of any thread
Status of the power supply changes
In order to receive environment change events, a TCallBack
object must be created. The constructor of the callback object takes two
parameters: The first is a pointer to a function to be called when an event
occurs and the second is a pointer to the object that implements the function.
TCallBack(TInt (*aFunction)(TAny* aPtr))
The CEnvironmentChangeNotifier
object takes
two parameters. The first one is a priority of the active object and the second
one is a reference to the callback object.
static CEnvironmentChangeNotifier* NewL(TInt aPriority, const TCallBack& aCallBack)
The Start()
function is called in order to start
observation.
void Start()
When an environment change event occurs, the function whose pointer
was given to the callback object is called. Details about an event that occurred
can be queried using the Change()
function.
TInt Change() const
The function returns a bit pattern, where each bit value corresponds
to one of the enumerations defined in TChanges
(e32const.h)
.
enum TChanges { EChangesLocale=0x01, EChangesMidnightCrossover=0x02, EChangesThreadDeath=0x04, EChangesPowerStatus=0x08, EChangesSystemTime=0x10, EChangesFreeMemory=0x20, EChangesOutOfMemory=0x40, };
Code example:
void CExampleEnvChangeNotifier::ConstructL() { iCallBack = new (ELeave)TCallBack(CallBackFunction, this); iChangeNotifier = CEnvironmentChangeNotifier::NewL(0, *iCallBack); iChangeNotifier->Start(); } CExampleEnvChangeNotifier::~CMyEnvChangeNotifier() { iChangeNotifier->Cancel(); delete iChangeNotifier; delete iCallBack; } TInt CExampleEnvChangeNotifier::CallBackFunction(TAny* aFunction) { return ((CEventsEnvChangeNotifier*)aFunction)->ChangeL(); } TInt CExampleEnvChangeNotifier::ChangeL() { TInt change = iChangeNotifier->Change(); if (change & EChangesLocale) { // Locale change, do something } if (change & EChangesMidnightCrossover) { // Midnight crossover, do something } if (change & EChangesThreadDeath) { // Thread death, do something } if (change & EChangesPowerStatus) { // Power status change, do something } if (change & EChangesSystemTime) { // System status change, do something } return 1; }