使用URL dispatcher的範例

來源:互聯網
上載者:User

標籤:font   目的   root   enables   title   deb   cli   span   data-   

在上面的一篇文章中,我們介紹了怎樣使用URL disptacher。在這篇文章中。我們來通過一個範例更進一步來瞭解怎樣實現它。


1)建立一個具有URL dispatcher的應用我們首先開啟我們的SDK,然後建立一個最主要的QML template應用。我們把該應用叫做“MyApp”。我們首先在“MyApp”的根資料夾加入一個檔案叫做“MyApp.url-dispatcher”檔案。這裡面的內容例如以下:
[{"protocol": "launchmyapp"}]

這種定義使得不論什麼在Qt.openUrlExternally()中具有以“launchmyapp:///”開頭的調用,就能夠開啟該應用。比方:
Qt.openUrlExternally("launchmyapp:///123");

同一時候。我們改動我們的manifest.json檔案例如以下:
{    "architecture": "all",    "description": "description of MyApp",    "framework": "ubuntu-sdk-14.10-dev2",    "hooks": {        "MyApp": {            "apparmor": "MyApp.apparmor",            "desktop": "MyApp.desktop",    "urls": "MyApp.url-dispatcher"        }    },    "maintainer": "XiaoGuo, Liu <[email protected]>",    "name": "com.ubuntu.developer.unknown.myapp",    "title": "MyApp",    "version": "0.1"}

注意這裡的“urls”項。到這裡,我們基本上就行讓我們的應用可以被其他的應用調用了。

為了可以得到調用應用傳來的參數,我們也同一時候改動我們的desktop檔案例如以下:


[Desktop Entry]Name=MyAppExec=qmlscene [email protected] main.qml -- %uIcon=MyApp.pngTerminal=falseType=ApplicationX-Ubuntu-Touch=true

注意這裡的" -- %u"。這是增加的部分。

為了可以在程式中顯示得到的URL資訊,我們對程式做了例如以下的改動:



import QtQuick 2.0import Ubuntu.Components 1.1/*!    \brief MainView with a Label and Button elements.*/MainView {    id:root    // objectName for functional testing purposes (autopilot-qt5)    objectName: "mainView"    // Note! applicationName needs to match the "name" field of the click manifest    applicationName: "com.ubuntu.developer.unknown.myapp"    Component.onCompleted: {        mylabel.text = "aaaa";        console.log( "arg length: " + myarg.arguments.length );        if ( myarg.defaultArgument === undefined) {            mylabel.text = "undefined";        } else {            mylabel.text = "args: " + myarg.defaultArgument.at(0);        }        console.log("argument: " + myarg.defaultArgument.at(0));        console.log("")    }    Arguments {        id: myarg        defaultArgument.help: "Expects URL of the media to play."        defaultArgument.valueNames: ["URL"]    }    /*     This property enables the application to change orientation     when the device is rotated. The default is false.    */    //automaticOrientation: true    // Removes the old toolbar and enables new features of the new header.    useDeprecatedToolbar: false    width: units.gu(50)    height: units.gu(75)    Page {        title: i18n.tr("MyApp")        Column {            spacing: units.gu(1)            anchors {                margins: units.gu(2)                fill: parent            }            Row {                spacing: units.gu(2)                Label {                    id: mylabel                    objectName: "label"                    text: i18n.tr("Received parameters: ")                }                Label {                    id: label                    objectName: "label"                    text: i18n.tr("")                }                Connections {                    target: UriHandler                    onOpened: {                        // root.applicationName = "good"                        mylabel.text = "dddddd";                        var para = "";                        for (var i = 0; i < uris.length; ++i) {                            // application.parseArgument(uris[i])                            console.log( uris[i] );                            para +=  uris[i];                        }                        label.text = para;                    }                }            }        }    }}

注意這裡的“UriHandler”部分。當應用在執行時,url dispatcher被調用時,該部分代碼會被執行。當應用沒有執行時。我們通過傳人的參數從而得到輸入的參數值:
    Arguments {        id: myarg        defaultArgument.help: "Expects URL of the media to play."        defaultArgument.valueNames: ["URL"]    }

整個的代碼在例如以下的地址能夠找到:
https://code.launchpad.net/~liu-xiao-guo/debiantrial/myapp


2)建立調用應用
這個應用事實上非常easy。

我們直接建立一個主要的QML template應用,同一時候改動我們的main.qml例如以下:


import QtQuick 2.0import Ubuntu.Components 1.1/*!    \brief MainView with a Label and Button elements.*/MainView {    // objectName for functional testing purposes (autopilot-qt5)    objectName: "mainView"    // Note! applicationName needs to match the "name" field of the click manifest    applicationName: "com.ubuntu.developer.unknown.launchmyapp"    /*     This property enables the application to change orientation     when the device is rotated. The default is false.    */    //automaticOrientation: true    // Removes the old toolbar and enables new features of the new header.    useDeprecatedToolbar: false    width: units.gu(100)    height: units.gu(75)    Page {        title: i18n.tr("LaunchMyApp")        Column {            spacing: units.gu(1)            anchors {                margins: units.gu(2)                fill: parent            }            Button {                objectName: "button"                width: parent.width                text: i18n.tr("Launch MyApp")                onClicked: {                    Qt.openUrlExternally("launchmyapp:///123");                }            }            Button {                objectName: "button"                width: parent.width                text: i18n.tr("Open MyApp")                onClicked: {                    Qt.openUrlExternally("appid://com.ubuntu.developer.unknown.myapp/MyApp/current-user-version");                }            }        }    }}

這裡我們使用了兩種方法來調用我們的“MyApp”。第一種是通過:
 Qt.openUrlExternally("launchmyapp:///123");

這樣的方法的優點是能夠傳人我們須要的參數,並解析,從而對於不同的參數能夠得到不同的響應。


第二種方式是通過:
Qt.openUrlExternally("appid://com.ubuntu.developer.unknown.myapp/MyApp/current-user-version");

這樣的方法不能解析不論什麼的參數,它能夠把應用啟動起來。我們能夠通過例如以下的方法得到應用的一些資訊:

執行我們的應用:


我們按下第一個button,假設“MyApp”沒有執行時,會顯示範範例如以下的在左邊的畫面。

假設“MyApp”在已經執行的情況下。能夠看到例如以下的右邊的畫面:


   

假設。我們點擊應用以下的button的話,能夠看到例如以下的畫面:


整個項目的原始碼在例如以下的地址能夠找到:

bzr branch lp:~liu-xiao-guo/debiantrial/launchmyapp




使用URL dispatcher的範例

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.