標籤: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的範例