×
Namespaces

Variants
Actions
(Difference between revisions)

QML SMShelper Plugin

From Nokia Developer Wiki
Jump to: navigation, search
vineet.jain (Talk | contribs)
(Vineet.jain -)
hamishwillee (Talk | contribs)
m (Hamishwillee - Bot update - Fix ArticleMetaData and other general fixes)
Line 2: Line 2:
 
{{Abstract|SMSplugin to expose Qt mobility SMS APIs to QML environment}}
 
{{Abstract|SMSplugin to expose Qt mobility SMS APIs to QML environment}}
 
__NOTOC__ __NOEDITSECTION__
 
__NOTOC__ __NOEDITSECTION__
{{ArticleMetaData
+
{{ArticleMetaData <!-- v1.2 -->
|platform=Symbian^3
+
|devices=N8, E7, C7
+
|creationdate=20110429
+
|keywords=QMessageService, QMessageManager
+
 
|sourcecode= [[Media:Smssender.zip]]
 
|sourcecode= [[Media:Smssender.zip]]
 
|installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) -->
 
|installfile= <!-- Link to installation file (e.g. [[Media:The Installation File.sis]]) -->
|sdk=[http://qt.nokia.com/downloads Qt SDK] 4.7.1 or newer and [http://qt.nokia.com/products/qt-addons/mobility Qt mobility] 1.1.0 or newer
+
|devices= N8, E7, C7
|devicecompatability=<!-- Compatible devices (e.g.: All* (must have GPS) ) -->
+
|sdk= [http://qt.nokia.com/downloads Qt SDK] 4.7.1 or newer and [http://qt.nokia.com/products/qt-addons/mobility Qt mobility] 1.1.0 or newer
|signing=Self-Signed
+
|platform= Symbian^3
|capabilities=NetworkServices
+
|devicecompatability= <!-- Compatible devices (e.g.: All* (must have GPS) ) -->
|author=[[User:Jahartik]]
+
|dependencies= <!-- Any other/external dependencies e.g.: Google Maps Api v1.0 -->
 +
|signing= Self-Signed
 +
|capabilities= NetworkServices
 +
|keywords= QMessageService, QMessageManager
 +
|language= <!-- Language category code for non-English topics - e.g. Lang-Chinese -->
 +
|translated-by= <!-- [[User:XXXX]] -->
 +
|translated-from-title= <!-- Title only -->
 +
|translated-from-id= <!-- Id of translated revision -->
 +
|review-by= <!-- After re-review: [[User:username]] -->
 +
|review-timestamp= <!-- After re-review: YYYYMMDD -->
 +
|update-by= <!-- After significant update: [[User:username]]-->
 +
|update-timestamp= <!-- After significant update: YYYYMMDD -->
 +
|creationdate= 20110429
 +
|author= [[User:Jahartik]]
 
}}
 
}}
  

Revision as of 07:11, 20 February 2012

SMSplugin to expose Qt mobility SMS APIs to QML environment

Article Metadata
Code Example
Source file: Media:Smssender.zip
Tested with
SDK: Qt SDK 4.7.1 or newer and Qt mobility 1.1.0 or newer
Devices(s): N8, E7, C7
Compatibility
Platform(s): Symbian^3
Platform Security
Signing Required: Self-Signed
Capabilities: NetworkServices
Article
Keywords: QMessageService, QMessageManager
Created: jahartik (29 Apr 2011)
Last edited: hamishwillee (20 Feb 2012)

Pro file

The following capabilities and libraries are required:

symbian:TARGET.CAPABILITY = NetworkServices
CONFIG += mobility
MOBILITY = messaging

Header file

smshelper.h applying this macro to definitions of member functions to allow them to be invoked via the meta-object system

#ifndef SMSHELPER_H
#define SMSHELPER_H
 
#include <QObject>
#include <qmessage.h>
#include <qmessageservice.h>
 
QTM_USE_NAMESPACE
 
 
#ifdef Q_OS_SYMBIAN
# define SENDSMS_ENABLED
#elif defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6)
# define SENDSMS_ENABLED
#endif
 
class SMSHelper : public QObject
{
Q_OBJECT
 
public:
explicit SMSHelper(QObject *parent = 0);
~SMSHelper();
 
Q_INVOKABLE bool sendsms(QString phonenumber, QString message);
 
signals:
void stateMsg(const QString &statemsg);
void errorMsg(const QString &errormsg);
void debugMsg(const QString &dbgmsg);
 
private slots:
void messageStateChanged(QMessageService::State s);
#ifndef SENDSMS_ENABLED
void signalFinishedState() { emit stateMsg("FinishedState");};
#endif
private:
QMessageService iMessageService;
QMessageManager iManager;
QMessageService::State state;
 
 
};
 
#endif // SMSHELPER_H


Source file

smshelper source code

#include "smshelper.h"
 
#ifndef SENDSMS_ENABLED
#include <QTimer>
#endif
 
SMSHelper::SMSHelper(QObject *parent) :
QObject(parent)
{
state = QMessageService::InactiveState;
connect(&iMessageService, SIGNAL(stateChanged(QMessageService::State)), this, SLOT(messageStateChanged(QMessageService::State)));
 
}
 
SMSHelper::~SMSHelper()
{
}
 
 
bool SMSHelper::sendsms(QString phonenumber, QString message)
{
 
#ifdef SENDSMS_ENABLED
if (!QMessageAccount::defaultAccount(QMessage::Sms).isValid())
{
emit errorMsg("No messageaccount for sms sending.");
return false;
}
 
if (state == QMessageService::InactiveState || state == QMessageService::FinishedState)
{
QMessage sms;
 
sms.setType(QMessage::Sms);
sms.setParentAccountId(QMessageAccount::defaultAccount(QMessage::Sms));
sms.setTo(QMessageAddress(QMessageAddress::Phone, phonenumber));
sms.setBody(message);
 
return iMessageService.send(sms);
}
else
{
return false;
}
 
#else
QTimer::singleShot(1000,this,SLOT(signalFinishedState()));
return true;
#endif
 
 
 
}
 
void SMSHelper::messageStateChanged(QMessageService::State s)
{
state = s;
 
if (s == QMessageService::InactiveState)
{
emit stateMsg("InactiveState");
}
else if (s == QMessageService::ActiveState)
{
emit stateMsg("ActiveState");
}
else if (s == QMessageService::CanceledState)
{
emit stateMsg("CanceledState");
}
else if (s == QMessageService::FinishedState)
{
emit stateMsg("FinishedState");
}
else
{
emit stateMsg(QString("QMessageService::%1").arg(s));
}
}

To register the C++ type in the QML system with the name SMSHelper include following code in your main.cpp file

qmlRegisterType<SMSHelper>("SMSHelper",1,0,"SMSHelper");

Import sms plugin in QML

import SMSHelper 1.0

Example use QML

SMSHelper
{
id: smshelper
}

SMShelper developer APIs

//Constructor and destructor
SMSHelper(QObject *parent = 0);
~SMSHelper();
 
public slots:
sendsms(QString phonenumber, QString message);
 
signals:
void stateMsg(const QString &statemsg);
void errorMsg(const QString &errormsg);
void debugMsg(const QString &dbgmsg);
83 page views in the last 30 days.