symbian 3.0 手機操作音樂播放快速鍵

來源:互聯網
上載者:User

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.

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.