Description
Key presses of media keys cannot be detected in the same way as other key events. Media keys, such as Play/Pause, Stop, Volume Up/Down, Rewind, and Forward keys featured on some S60 3rd Edition devices do not generate normal key events that could be handled within the application framework, for example, in HandleKeyEventL() or OfferKeyEventL() .
Solution
Events from media keys can be handled with the Remote Control API . Below is a code snippet that demonstrates this.
Remote Control API requires ReadUserData capability.
To handle hardware keys the following approach can be followed.
1) Derive a class from MRemConCoreApiTargetObserver
2) Use the following code snippet in your class.
CRemConInterfaceSelector* iSelector;
CRemConCoreApiTarget* iTarget;
//preferably in the constructL()
iSelector=CRemConInterfaceSelector::NewL();
iTarget = CRemConCoreApiTarget::NewL( *iSelector, *this );
iSelector->OpenTargetL();
3) MrccatoCommand() api is an virtual method in MRemConCoreApiTargetObserver which should be implemented.This is a callback method which will be called by the framework when a hardware key is pressed.
void MrccatoCommand(TRemConCoreApiOperationId aOperationId,TRemConCoreApiButtonAction aButtonAct)
{
switch(aOperationId)
{
case ERemConCoreApiVolumeDown:
{
//do your own stuff
break;
}
case ERemConCoreApiVolumeUp:
{
//do your own stuff
break;
}
}
}
4) Header file for CRemConInterfaceSelector: remconinterfaceselector.h
Library: remconinterfacebase.lib
Header file for CRemConCoreApiTarget: remconcoreapitarget.h
Library:remconcoreapi.lib