如何在QML应用中启动Scope

在这篇文章中,我们将介绍如何在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

如何在QML应用中启动Scope的相关文章

如何在QML应用中调用系统设置中的页面来设置我们的系统

我们在QML应用中有时需要调用系统设置(system settings)来完成我们的一些设置.比如,我们在使用GPS来定位时,可能GPS并没有打开,如果在我们的应用中直接打开系统中的GPS设置页面,这样我们就可以直接打开系统的GPS而不用单独设计一个页面.我们可以通过使用URL dispatcher的方法来打开另外一个应用.在先前的我们的文章中,我们已经讲述了很多关于URL dispatcher方面的东西: 怎么在Ubuntu手机上发送短信及拨打电话 使用URL dispatcher的范例 关于

如何在QML应用中实现一个Splash画面

在QML应用中,我们经常要用到一个SplashScreen的画面来渲染我们的应用.那么我们怎么在自己的应用中做一个Splash Screen呢? 首先我们来设计一个自己的SplashScreen的QML模块: SplashScreen.qml import QtQuick 2.0 Item { id: splash anchors.fill: parent property int timeoutInterval: 2000 signal timeout Image { id: splashIm

如何在QML应用中读写文件

我们知道,在QML应用中,有时我们需要来读写一些文件,但是在我们的QML语言中并没有相应的API接口来供我们做(虽然有API接口来存储设置文件等).那么我们怎么来做这个事情呢?我们可以通过Qt C++的方法来实现这个功能. 1)创建一个简单的模版应用 我们使用Ubuntu SDK的模版来创建一个最简单的应用:      我们选择"QML App with C++ plugin"模版来做我们的应用. 2)添加文件读写的文件到项目中 我们添加如下的C++ "FileIO类到我们的

如何在QML应用中得到一个Item的所有属性,信号及方法

Item是QML语言中最基本的元素.有时为了方便,我们可以列出它里面的所有的属性,信号及方法.我们可以通过这个方法来修改我们的属性等.在QML语言中,所有的可视的控件都是继承于Item的. 下面我们来通过一个例子来展示如何这么做.我们可以设计一个简单的QML应用如下: import QtQuick 2.0 import Ubuntu.Components 1.1 /*! \brief MainView with a Label and Button elements. */ MainView {

如何在QML应用中使用Javascript解析JSON

很多QML应需要访问web services.我们可以通过Javascript的方法来解析得到我们所需要的JSON数据,并把它们展示出来.在今天的例子中,我们将展示如何实现它? 我们可以创建一个最基本的"QML App with Simple UI (qmlproject)",并取名我们的应用为"baidutranslator".我们将使用的API为: http://openapi.baidu.com/public/2.0/bmt/translate?client_

如何在QML应用中动态修改ListModel中的数据并存储它为JSON格式

我们知道JSON数据格式被广泛使用在很多的应用中,它可以帮我们保存我们应用的设置数据等.在QML中的ListView或GridView中,我们使用ListModel来显示它里面的数据.这个数据可以来源于xml或JSON.在ListView或GridView中,我们也可以动态修改ListModel中的数据.那么我们将如何保存这个数据呢?本篇文章也同样适用于xml格式的保存.这个练习就留个开发者自己了.当然保存ListModel中的数据也可以使用到SQLite数据库.这个因人而已! 为了方便我们的设

如何在dos命令中启动mysql或sql server 服务器的一些操作

========================dos命令启动mysql或者sql srever 的步骤================= 一.dos命令启动mysql 1.进入dos命令窗口 2.启动mysql服务器,net start mysql 3.登录到mysql服务器中,mysql -hlocalhost -uroot -p123456() 4.首先可以先显示所有的数据库,show databases; 5.看到有哪些数据库可以使用数据库,use 数据库名; 6.进入到数据库中后,先看

如何在QML应用中使用Javascript来解析XML

我们知道有很多的web services是使用XML格式的,我们可以通过使用XmlListModel来解析我们的XML.但是在有些情况下,我们可能需要使用Javascript来解析XML,这样使得我们可以更加灵活地解析我们所需要的XML数据.比如,通过一个请求,我们可以来解析XML结果中的多个数据.比较而言,XmlListModel只能对XPath路经下(由source属性定义)的数据进行解析.如果需要多个路径,可以通过多次对不同的路径进行查询.当然,我们可能需要一些方法来同步这些查询(如果最终

如何在QML应用中创建一个Context Menu

我们在很多的系统中看见可以在屏幕的一个地方长按,然后就可以根据当前显示的上下文弹出一个菜单.菜单中可以有一些选项,比如删除,修改该项.这种一般在ListView或GridView中常见.今天,我们就在这个例程中详细介绍如何实现这个功能. 对ListView来说,我们只需要对它的delegate做一些修改: Component { id: listDelegate ListItem { id: delegateItem width: listView.width; height: units.gu