媒体键的应用
From Forum Nokia Wiki
- 设备, 软件 版本:
S60 3rd Edition
- 详细描述
媒体键的按键事件是无法通过常规手段监测到的,这点和其他按键事件不同。媒体键,如播放/暂停,停止,音量高/低,前进以及后退等键,属于一些S60第三版手机的新特性,不会生成一般的
按键事件,以便被程序框架捕捉,如HandleKeyEventL()以及OfferKeyEventL()。
- 解决方案
媒体键的按键事件要通过Remote Control API来处理。
下列代码片段演示了如何处理:
CRemConInterfaceSelector
CRemConCoreApiTarget
MRemConCoreApiTargetObserver
Remote Control API requires ReadUserData capability.
//------------------------------------------------------------------------------
#include <remconcoreapitargetobserver.h> // link against RemConCoreApi.lib
#include <remconcoreapitarget.h> // and
#include <remconinterfaceselector.h> // RemConInterfaceBase.lib
class CMediaKeysTestUi : public CAknAppUi, public MRemConCoreApiTargetObserver
{
...
// From MRemConCoreApiTargetObserver
void MrccatoCommand(TRemConCoreApiOperationId aOperationId,
TRemConCoreApiButtonAction aButtonAct);
// following functions from MRemConCoreApiTargetObserver are not needed
// in this case -> use empty implementations for these:
// MrccatoPlay
// MrccatoTuneFunction
// MrccatoSelectDiskFunction
// MrccatoSelectAvInputFunction
// MrccatoSelectAudioInputFunction
private:
CRemConInterfaceSelector* iInterfaceSelector;
CRemConCoreApiTarget* iCoreTarget;
};
void CMediaKeysTestUi::ConstructL()
{
...
iInterfaceSelector = CRemConInterfaceSelector::NewL();
iCoreTarget = CRemConCoreApiTarget::NewL(*iInterfaceSelector, *this);
iInterfaceSelector->OpenTargetL();
}
// ----------------------------------------------------------------------------
// MrccatoCommand()
// Receives events (press/click/release) from the following buttons:
// 'Play/Pause', 'Volume Up', 'Volume Down', 'Stop', 'Rewind', 'Forward'
// ----------------------------------------------------------------------------
void CMediaKeysTestUi::MrccatoCommand(TRemConCoreApiOperationId aOperationId,
TRemConCoreApiButtonAction aButtonAct)
{
TRequestStatus status;
switch( aOperationId )
{
case ERemConCoreApiPausePlayFunction:
{
switch (aButtonAct)
{
case ERemConCoreApiButtonPress:
// Play/Pause button pressed
break;
case ERemConCoreApiButtonRelease:
// Play/Pause button released
break;
case ERemConCoreApiButtonClick:
// Play/Pause button clicked
break;
default:
// Play/Pause unknown action
break;
}
//Send the response back to Remcon server
iCoreTarget->PausePlayFunctionResponse(status, KErrNone);
User::WaitForRequest(status);
break;
}
case ERemConCoreApiStop:
{
switch (aButtonAct)
{
// see above (case ERemConCoreApiPausePlayFunction)
// for possible actions
}
iCoreTarget->StopResponse(status, KErrNone);
User::WaitForRequest(status);
break;
}
case ERemConCoreApiRewind:
{
switch (aButtonAct)
{
// see above for possible actions
}
iCoreTarget->RewindResponse(status, KErrNone);
User::WaitForRequest(status);
break;
}
case ERemConCoreApiForward:
{
switch (aButtonAct)
{
// see above for possible actions
}
iCoreTarget->ForwardResponse(status, KErrNone);
User::WaitForRequest(status);
break;
}
case ERemConCoreApiVolumeUp:
{
switch (aButtonAct)
{
// see above for possible actions
}
iCoreTarget->VolumeUpResponse(status, KErrNone);
User::WaitForRequest(status);
break;
}
case ERemConCoreApiVolumeDown:
{
switch (aButtonAct)
{
// see above for possible actions
}
iCoreTarget->VolumeDownResponse(status, KErrNone);
User::WaitForRequest(status);
break;
}
case ERemConCoreApiFastForward:
{
switch (aButtonAct)
{
// see above for possible actions
}
iCoreTarget->FastForwardResponse(status, KErrNone);
User::WaitForRequest(status);
break;
}
case ERemConCoreApiBackward:
{
switch (aButtonAct)
{
// see above for possible actions
}
iCoreTarget->BackwardResponse(status, KErrNone);
User::WaitForRequest(status);
break;
}
default:
break;
}
}