Audio Volume Key Event On Symbian/bg: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
 
No edit summary
Line 1: Line 1:
'''Български''' [[Audio Volume Key Event On Symbian|English]]
[[Category:snippets]]


=Прихващане на събития, свързани с бутон за звук на Symbian устройства=
'''Български''' [[Audio_Volume_Key_Event_On_Symbian|English]]


В <span class="caps">QML</span> за Symbian устройста събитията за бутона за звук не могат да бъдат прихванати чрез Keys.onVolumeDownPressed, Keys.onVolumeUpPressed, or Keys.onPressed. Подходящо решение на този проблем е създаване на клас, обвиващ [http://wiki.forum.nokia.com/index.php/TSS000432_-_Utilising_media_keys S60 Remote Control <span class="caps">API</span>] ''[wiki.forum.nokia.com]'' чрез наследяване на [http://library.forum.nokia.com/index.jsp?topic=/S60_5th_Edition_Cpp_Developers_Library/GUID-35228542-8C95-4849-A73F-2B4F082F0C44/sdk/doc_source/reference/reference-cpp/Remote_Control_Framework/MRemConCoreApiTargetObserverClass.html MRemConCoreApiTargetObserver] ''[library.forum.nokia.com]''. Този примерен код, който показва как това може да бъде направено при създаване на <span class="caps">QML</span>/C++ приложение. Аналогично може да бъде създаден и <span class="caps">QML</span> plugin.
= Прихващане на събития, свързани с бутон за звук на Symbian устройства =


Създайте нов <span class="caps">QML</span> елемент, които да обработва събития, свързани с бутоните за звук. Всъщност чрез S60 Remote Control <span class="caps">API</span> могат да бъдат прихващани и други събития свързвани с бутоните за медия. За подробности вижте линка по-горе.
В QML за Symbian устройста събитията за бутона за звук не могат да бъдат прихванати чрез Keys.onVolumeDownPressed, Keys.onVolumeUpPressed, or Keys.onPressed. Подходящо решение на този проблем е създаване на клас, обвиващ &quot;S60 Remote Control API&amp;quot;:http://wiki.forum.nokia.com/index.php/TSS000432_-_Utilising_media_keys чрез наследяване на &quot;MRemConCoreApiTargetObserver&amp;quot;:http://library.forum.nokia.com/index.jsp?topic=/S60_5th_Edition_Cpp_Developers_Library/GUID-35228542-8C95-4849-A73F-2B4F082F0C44/sdk/doc_source/reference/reference-cpp/Remote_Control_Framework/MRemConCoreApiTargetObserverClass.html. Този примерен код, който показва как това може да бъде направено при създаване на QML/C++ приложение. Аналогично може да бъде създаден и QML plugin.
 
Създайте нов QML елемент, които да обработва събития, свързани с бутоните за звук. Всъщност чрез S60 Remote Control API могат да бъдат прихващани и други събития свързвани с бутоните за медия. За подробности вижте линка по-горе.


'''MediakeyCaptureItem.h'''
'''MediakeyCaptureItem.h'''
<code><br />#ifndef MediakeyCaptureItem_H<br />#define MediakeyCaptureItem_H
#include &lt;QDeclarativeItem&amp;gt;
#ifdef Q_WS_S60<br />#include &lt;remconcoreapitargetobserver.h&amp;gt; // link against RemConCoreApi.lib<br />#include &lt;remconcoreapitarget.h&amp;gt; // and<br />#include &lt;remconinterfaceselector.h&amp;gt; // RemConInterfaceBase.lib
class MediakeyCaptureItemPrivate;<br />class MediakeyCaptureItem : public QDeclarativeItem<br />{<br /> Q_OBJECT<br />public:<br /> MediakeyCaptureItem(QDeclarativeItem *parent = 0);<br /> void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
signals:<br /> void volumeDownPressed();<br /> void volumeUpPressed();
private:<br /> MediakeyCaptureItemPrivate *d_ptr;<br />private: // Friend class definitions<br /> friend class MediakeyCaptureItemPrivate;<br />};
#endif // Q_WS_S60<br />#endif // MediakeyCaptureItem_H<br /></code>


'''MediakeyCaptureItem.cpp'''
'''MediakeyCaptureItem.cpp'''


В C++ кода направете регистрация:
<code><br />#include &quot;MediaKeyCaptureItem.h&amp;quot;<br />#ifdef Q_WS_S60
 
Необходимо е да добавите следните няколко реда във .pro файла на вашия проект:


В <span class="caps">QML</span> слушайте за сигнали по следния начин:
// A private class to access Symbian RemCon API<br />class MediakeyCaptureItemPrivate : public QObject, public MRemConCoreApiTargetObserver<br />{<br />public:<br /> MediakeyCaptureItemPrivate(MediakeyCaptureItem '''parent);<br /> ~MediakeyCaptureItemPrivate();<br /> virtual void MrccatoCommand(TRemConCoreApiOperationId aOperationId,<br /> TRemConCoreApiButtonAction aButtonAct);<br />private:<br /> CRemConInterfaceSelector''' iInterfaceSelector;<br /> CRemConCoreApiTarget* iCoreTarget;<br /> MediakeyCaptureItem *d_ptr;<br />};


==Отстраняване на проблеми==
// Consructor<br />MediakeyCaptureItem::MediakeyCaptureItem(QDeclarativeItem *parent): QDeclarativeItem(parent)<br />{<br /> d_ptr = new MediakeyCaptureItemPrivate(this);<br />}


Ако използвате Qt <span class="caps">SDK</span> 1.1 (Windows, Beta and RC) за Symbian^3 е необходимо да копирате всичко от<br /> в<br /> и проблемите при създаване на приложението ще бъдат разрешени.
// The paint method<br />void MediakeyCaptureItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)<br />{<br /> // This item has no visual<br />}


===Categories:===
// Constructor<br />MediakeyCaptureItemPrivate::MediakeyCaptureItemPrivate(MediakeyCaptureItem *parent): d_ptr(parent)<br />{<br /> QT_TRAP_THROWING(iInterfaceSelector = CRemConInterfaceSelector::NewL());<br /> QT_TRAP_THROWING(iCoreTarget = CRemConCoreApiTarget::NewL(*iInterfaceSelector, '''this));<br /> iInterfaceSelector-&gt;OpenTargetL();<br />}
<br />// Destructor<br />MediakeyCaptureItemPrivate::~MediakeyCaptureItemPrivate(){<br /> delete iInterfaceSelector;<br /> delete iCoreTarget;<br />}
<br />// Callback when media keys are pressed<br />void MediakeyCaptureItemPrivate::MrccatoCommand(TRemConCoreApiOperationId aOperationId,<br /> TRemConCoreApiButtonAction aButtonAct)<br />{<br /> //TRequestStatus status;<br /> switch( aOperationId )<br /> {<br /> case ERemConCoreApiVolumeUp:<br /> emit d_ptr-&gt;volumeUpPressed();<br /> break;<br /> case ERemConCoreApiVolumeDown:<br /> emit d_ptr-&gt;volumeDownPressed();<br /> break;<br /> default:<br /> break;<br /> }<br />}<br />#endif // Q_WS_S60<br /></code>
<br />В C++ кода направете регистрация:
<br /><code><br />qmlRegisterType&amp;lt;MediakeyCaptureItem&amp;gt;(&quot;Mediakey&amp;quot;, 1, 0, &quot;MediakeyCapture&amp;quot;);<br /></code>
<br />Необходимо е да добавите следните няколко реда във .pro файла на вашия проект:
<br /><code><br />symbian{<br /> INCLUDEPATH ''= MW_LAYER_SYSTEMINCLUDE // Not sure if this is needed…<br /> LIBS''= -L\epoc32\release\armv5\lib -lremconcoreapi<br /> LIBS += -L\epoc32\release\armv5\lib -lremconinterfacebase<br />}<br /></code>


* [[:Category:snippets|snippets]]
<br />В QML слушайте за сигнали по следния начин:
<br /><code><br />import Qt 4.7<br />import Mediakey 1.0<br />Item{
<br /> …
<br /> MediakeyCapture{<br /> onVolumeDownPressed: console.log('VOLUME DOWN PRESSED ')<br /> onVolumeUpPressed: console.log('VOLUME UP PRESSED ')<br /> }<br />}<br /></code>
<br />h2. Отстраняване на проблеми
<br />Ако използвате Qt SDK 1.1 (Windows, Beta and RC) за Symbian^3 е необходимо да копирате всичко от<br /><code><br />C:3Qt472\epoc32\release\armv5\lib\rem'''<br /></code><br />в<br /><code><br />C:1Qt472\epoc32\release\armv5\lib<br /></code>

Revision as of 06:16, 24 February 2015


Български English

Прихващане на събития, свързани с бутон за звук на Symbian устройства

В QML за Symbian устройста събитията за бутона за звук не могат да бъдат прихванати чрез Keys.onVolumeDownPressed, Keys.onVolumeUpPressed, or Keys.onPressed. Подходящо решение на този проблем е създаване на клас, обвиващ "S60 Remote Control API&quot;:http://wiki.forum.nokia.com/index.php/TSS000432_-_Utilising_media_keys чрез наследяване на "MRemConCoreApiTargetObserver&quot;:http://library.forum.nokia.com/index.jsp?topic=/S60_5th_Edition_Cpp_Developers_Library/GUID-35228542-8C95-4849-A73F-2B4F082F0C44/sdk/doc_source/reference/reference-cpp/Remote_Control_Framework/MRemConCoreApiTargetObserverClass.html. Този примерен код, който показва как това може да бъде направено при създаване на QML/C++ приложение. Аналогично може да бъде създаден и QML plugin.

Създайте нов QML елемент, които да обработва събития, свързани с бутоните за звук. Всъщност чрез S60 Remote Control API могат да бъдат прихващани и други събития свързвани с бутоните за медия. За подробности вижте линка по-горе.

MediakeyCaptureItem.h

<br />#ifndef MediakeyCaptureItem_H<br />#define MediakeyCaptureItem_H

#include &lt;QDeclarativeItem&amp;gt;

#ifdef Q_WS_S60<br />#include &lt;remconcoreapitargetobserver.h&amp;gt; // link against RemConCoreApi.lib<br />#include &lt;remconcoreapitarget.h&amp;gt; // and<br />#include &lt;remconinterfaceselector.h&amp;gt; // RemConInterfaceBase.lib

class MediakeyCaptureItemPrivate;<br />class MediakeyCaptureItem : public QDeclarativeItem<br />{<br /> Q_OBJECT<br />public:<br /> MediakeyCaptureItem(QDeclarativeItem *parent = 0);<br /> void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);

signals:<br /> void volumeDownPressed();<br /> void volumeUpPressed();

private:<br /> MediakeyCaptureItemPrivate *d_ptr;<br />private: // Friend class definitions<br /> friend class MediakeyCaptureItemPrivate;<br />};

#endif // Q_WS_S60<br />#endif // MediakeyCaptureItem_H<br />

MediakeyCaptureItem.cpp

<br />#include &quot;MediaKeyCaptureItem.h&amp;quot;<br />#ifdef Q_WS_S60

// A private class to access Symbian RemCon API<br />class MediakeyCaptureItemPrivate : public QObject, public MRemConCoreApiTargetObserver<br />{<br />public:<br /> MediakeyCaptureItemPrivate(MediakeyCaptureItem '''parent);<br /> ~MediakeyCaptureItemPrivate();<br /> virtual void MrccatoCommand(TRemConCoreApiOperationId aOperationId,<br /> TRemConCoreApiButtonAction aButtonAct);<br />private:<br /> CRemConInterfaceSelector''' iInterfaceSelector;<br /> CRemConCoreApiTarget* iCoreTarget;<br /> MediakeyCaptureItem *d_ptr;<br />};

// Consructor<br />MediakeyCaptureItem::MediakeyCaptureItem(QDeclarativeItem *parent): QDeclarativeItem(parent)<br />{<br /> d_ptr = new MediakeyCaptureItemPrivate(this);<br />}

// The paint method<br />void MediakeyCaptureItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)<br />{<br /> // This item has no visual<br />}

// Constructor<br />MediakeyCaptureItemPrivate::MediakeyCaptureItemPrivate(MediakeyCaptureItem *parent): d_ptr(parent)<br />{<br /> QT_TRAP_THROWING(iInterfaceSelector = CRemConInterfaceSelector::NewL());<br /> QT_TRAP_THROWING(iCoreTarget = CRemConCoreApiTarget::NewL(*iInterfaceSelector, '''this));<br /> iInterfaceSelector-&gt;OpenTargetL();<br />}
<br />// Destructor<br />MediakeyCaptureItemPrivate::~MediakeyCaptureItemPrivate(){<br /> delete iInterfaceSelector;<br /> delete iCoreTarget;<br />}
<br />// Callback when media keys are pressed<br />void MediakeyCaptureItemPrivate::MrccatoCommand(TRemConCoreApiOperationId aOperationId,<br /> TRemConCoreApiButtonAction aButtonAct)<br />{<br /> //TRequestStatus status;<br /> switch( aOperationId )<br /> {<br /> case ERemConCoreApiVolumeUp:<br /> emit d_ptr-&gt;volumeUpPressed();<br /> break;<br /> case ERemConCoreApiVolumeDown:<br /> emit d_ptr-&gt;volumeDownPressed();<br /> break;<br /> default:<br /> break;<br /> }<br />}<br />#endif // Q_WS_S60<br />


В C++ кода направете регистрация:


<br />qmlRegisterType&amp;lt;MediakeyCaptureItem&amp;gt;(&quot;Mediakey&amp;quot;, 1, 0, &quot;MediakeyCapture&amp;quot;);<br />


Необходимо е да добавите следните няколко реда във .pro файла на вашия проект:


<br />symbian{<br /> INCLUDEPATH ''= MW_LAYER_SYSTEMINCLUDE // Not sure if this is needed…<br /> LIBS''= -L\epoc32\release\armv5\lib -lremconcoreapi<br /> LIBS += -L\epoc32\release\armv5\lib -lremconinterfacebase<br />}<br />


В QML слушайте за сигнали по следния начин:


<br />import Qt 4.7<br />import Mediakey 1.0<br />Item{
<br /> 
<br /> MediakeyCapture{<br /> onVolumeDownPressed: console.log('VOLUME DOWN PRESSED ')<br /> onVolumeUpPressed: console.log('VOLUME UP PRESSED ')<br /> }<br />}<br />


h2. Отстраняване на проблеми


Ако използвате Qt SDK 1.1 (Windows, Beta and RC) за Symbian^3 е необходимо да копирате всичко от

<br />C:3Qt472\epoc32\release\armv5\lib\rem'''<br />


в

<br />C:1Qt472\epoc32\release\armv5\lib<br />