现在的位置: 首页 > 综合 > 正文

symbian 3.0 手机操作音乐播放快捷键

2013年08月12日 ⁄ 综合 ⁄ 共 5472字 ⁄ 字号 评论关闭

Overview:

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, e.g. 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. The classes used are:

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;

        }

    }    

//------------------------------------------------------------------------------

Note that when pressed and held, media keys do not automatically repeat the commands. If repeat functionality is required, it has to be implemented with (CPeriodic) timers.

 

抱歉!评论已关闭.