在这篇文章中,我们将介绍如何在QML应用中调用Scope,并把搜索的关键词传进去。这对有些QML应用需要用到Scope的情况非常有用。更多关于url-dispatcher的知识,请在文章“使用URL dispatcher的范例”看到。
【QML|如何在QML应用中启动Scope】
Scope ID
首先我们来讲一下什么是Scope ID。我们打开我们创建的任何一个Scope的manifest.json文件:
{
"architecture": "@CLICK_ARCH@",
"description": "A simple Unity scope that accesses the network",
"framework": "ubuntu-sdk-15.04",
"hooks": {
"mytestscope": {
"apparmor": "mytestscope.apparmor",
"scope": "mytestscope"
}
},
"maintainer": "XiaoGuo, Liu ",
"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”的包信息,我们可以打入如下的命令:
phablet@ubuntu-phablet:~$ 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: falsewidth: 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
运行我们的应用:
文章图片
文章图片
整个项目的源码在: https://github.com/liu-xiao-guo/launchscopes