Responding to Service Requests
To respond to a service request, an application should use the QtopiaAbstractService class. The following example responds to the openURL(QString) request on the WebAccess service. It would typically be implemented by a Web browser application:
class WebAccessService : public QtopiaAbstractService
{
Q_OBJECT
public:
WebAccessService( QObject *parent )
: QtopiaAbstractService( "WebAccess", parent )
{ publishAll(); }
public slots:
void openURL( const QString& url );
};
When an openURL(QString) request arrives, it will be automatically delivered to the WebAccessService::openURL() slot in the application.
Applications register as providing a service by supplying a standard Qt Extended configuration file, $QPEDIR/services/<servicename>/<appname> where:
- The servicename is the directory name and the name of the service.
- The appname is the application executable filename.
The standard keys in this file are:
The file may contain any additional sections, keys and values as defined by the documentation of the service.
Adding a New Service
Each new service must be carefully specified as it provides a system- wide API that can be invoked by other applications and the user. A service should only be added if it:
- Provides new functionality not already provided by a pre-defined service.
- Is useful to other applications.
- Is well-defined within the scope of the application type, e.g. openURL(QString <url>) for a web browser.
- Avoids adding unnecessary functionality which could complicate the user interface.
To add a new service, provide a standard Qt Extended configuration file, $QPEDIR/services/<servicename>.service. The keys in this file are:
- [Service]
- [action]
For each entry in the Actions list above, there is a group defining properties of the action.
An action with no parameters will appear in the list of available actions in the button settings. There is no need to add this section if the action has parameters and will not be shown to the user.
For example:
[Translation]
File=QtopiaServices
Context=Calendar
[Service]
Actions = "raiseToday();newEvent()"
Icon = datebook_icon
Name[]=Calendar
[newEvent()]
Icon = datebook_icon
Name[]=New event
[raiseToday()]
Icon=today
Name[]=Today's calendar
Usually, only one application responds to a given service. The user selects the application to handle the service using the Application Serviceas settings. If the service can be provided by multiple applications, the service file will contain:
Multiple = 1
in the [Service] section.
Advanced Service Functionality
Some services may be parameterised on the type of data to be processed. Different applications may handle different data types. The Qt Extended Data Sharing (QDS) system should be used for these types of services.