如何在QT应用程序中读取Meamo5的IMEI码

Maemo 5 为获得手机上的IMEI吗提供了DBus接口。服务的名称是com.nokia.phone.SIM,路径是/com/nokia/phone/SIM/security,接口名是Phone.Sim.Security。最后,获得IMEI码的方法名get_imei

你可以在XTerm中用dbus-send工具来核实:

bus-send --system --type=method_call --print-reply /
          --dest=com.nokia.phone.SIM /
          /com/nokia/phone/SIM/security /
          Phone.Sim.Security.get_imei 

现在你要怎样用c++和qt来做呢?首先你要系统总线上创建一个可以被服务、路径、接口识别的接口。接下来,显示那个获取方法的回复。需要注意的是这个调用是异步的,也就是阻塞的。这个简单的例子和轻量级的调用,使用QDBusAbstractInterface::callWithCallback()可以完成多种任务。回复包含一个字符串和一个整型值。

#include 
#include 
#include 
#include 
#include 
 
#define SIM_DBUS_SERVICE  "com.nokia.phone.SIM"
#define SIM_DBUS_PATH     "/com/nokia/phone/SIM/security"
#define SIM_DBUS_IFACE    "Phone.Sim.Security"
#define SIM_IMEI_REQ      "get_imei"
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
    QLabel label;
    label.setAlignment(Qt::AlignCenter);
    label.setFont(QFont("Nokia Sans", 35, QFont::Bold));
    label.show();
 
    QDBusInterface interface(SIM_DBUS_SERVICE, SIM_DBUS_PATH, SIM_DBUS_IFACE,
        QDBusConnection::systemBus());
 
    QDBusMessage reply = interface.call(SIM_IMEI_REQ);
    if (reply.type() == QDBusMessage::ErrorMessage)
        qDebug() << reply.errorMessage();
    else {
        QList args = reply.arguments();
        qDebug() << args;
        label.setText(QString("Phone's IMEI: %1").arg(args.at(0).toString()));
    }
 
    return a.exec();
} 

本文译自:http://wiki.forum.nokia.com/index.php/How_to_read_IMEI_in_Qt_application_for_Maemo_5

你可能感兴趣的:(service,application,qt,interface,Nokia,Maemo)