在这篇文章中,我们将介绍如何在QML应用中调用Scope,并把搜索的关键词传进去。这对有些QML应用需要用到Scope的情况非常有用。更多关于url-dispatcher的知识,请在文章“使用URL dispatcher的范例”看到。
Scope ID
首先我们来讲一下什么是Scope ID。我们打开我们创建的任何一个Scope的manifest.json文件:
{ "architecture": "@[email protected]", "description": "A simple Unity scope that accesses the network", "framework": "ubuntu-sdk-15.04", "hooks": { "mytestscope": { "apparmor": "mytestscope.apparmor", "scope": "mytestscope" } }, "maintainer": "XiaoGuo, Liu <[email protected]>", "name": "mytestscope.liu-xiao-guo", "title": "mytestscope", "version": "0.1" }
这里我们看见了“name”。它的值为“mytestscope.liu-xiao-guo”。那么它的Scope ID为
mytestscope.liu-xiao-guo_mytestscope
这里有一个下划线,“mytestscope”是定义在“hooks”下面的字符串。
那么我们怎么查看在我们手机中的Scope呢?
首先,我们在terminal中进入到手机中:
$adb shell
在这里,我们可以看见所有已经安装的click包。假如我们想看上面所显示的“weibo.ubuntu”的包信息,我们可以打入如下的命令:
[email protected]:~$ click info weibo.ubuntu
这里我们可以看到manifest.json所看到的信息。按照上面的方法,我们可以找到我们相应的Scope ID。
另外,我们也可以通过如下的方法得到应用或者Scope的ID。
这里其实已经很清楚地告诉你Scope ID了。
在QML应用中调用Scope
在这里其实已经非常简单了。我们设计一个我们的QML应用如下:
import QtQuick 2.0 import 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: "launchscopes.liu-xiao-guo" /* 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(60) height: units.gu(85) Page { title: i18n.tr("launchscopes") Column { anchors.centerIn: parent spacing: units.gu(2) Button { text: "Launch Youtube scope" onClicked: { console.log("it is clicked!"); Qt.openUrlExternally("scope://com.ubuntu.scopes.youtube_youtube"); } } Button { text: "Launch store scope" onClicked: { console.log("it is clicked!"); Qt.openUrlExternally("scope://com.canonical.scopes.clickstore?q=weibo"); } } Button { text: "Launch weibo scope" onClicked: { console.log("it is clicked!"); Qt.openUrlExternally("scope://weibo.ubuntu_weibo"); } } } } }
在这里,我们可以直接调用Scope ID来启动Scope,同时,我们也可以传人参数:
Qt.openUrlExternally("scope://com.canonical.scopes.clickstore?q=weibo");
如果有空格的话,按照如下的方式:
scope://com.ubuntu.scopes.youtube_youtube?q=Foo%20Fighters
运行我们的应用:
整个项目的源码在: git clone https://gitcafe.com/ubuntu/launchscopes.git
时间: 2025-01-08 22:54:20