Web Activities 简介

最近一段时间最火的移动应用组件是 Intent。在你的应用里设置一些 action,或者指定你的应用需要的服务,就可以完成想完成的事情。

在 Firefox OS 里, Intent 尤其重要。不管你的 web app 有多好用,这个应用总是要和设备上的其他的应用以及 activity 进行交互。这就是为什么有 Web Activity。

Intent 是我们最近发明的 WebAPI,也是让 web 变成强大的平台的一步。我们通过一个简单的 API 来指定应用中的 Intent,并且声明我们的应用可以接受其他应用的请求。

如果你还没有开始开发你的 web app,你应当首先阅读 Getting started with making apps。简而言之,web app 是 HTML5, CSS 和 JavaScript 以及应用声明的有机组合。

Web Activity 入门

调用 Web Activity 有若干种方法:

  • 调用一个 activity,并由可以处理这个 activity 的应用展示出来

  • 在声明文件中注册你的 activity

  • 运行时注册 activity

  • 在 activity 出现时通过 handler 注册你的应用

调用 activity

假设你的应用里有一个按钮,你可以从相机、画廊或者其他支持 activity 的应用里获取一张图片,比如:

var pick = new MozActivity({
   name: "pick",
   data: {
       type: ["image/png", "image/jpg", "image/jpeg"]
   }});

在这个例子里,我们指定 activity 的名字 <tt class="docutils literal">pick</tt> ,并且选择接受 PNG 或者 JPEG 图片。接下来,你会看到下面的菜单:




用户在此选择图片的来源。一旦选择完毕,结果将送回发送请求的应用中。( 注意:处理 activity 的应用确定返回的数据 )

处理回应

大部分 WebAPI 都有 onsuccess 以及 onerror 的 event handler,Web Activity 也不例外。对于图片来讲,返回的数据是 blob,你可以直接用下面的代码在应用中显示图片:

pick.onsuccess = function () {

    // Create image and set the returned blob as the src    var img = document.createElement("img");
    img.src = window.URL.createObjectURL(this.result.blob);

    // Present that image in your app    var imagePresenter = document.querySelector("#image-presenter");
    imagePresenter.appendChild(img);};pick.onerror = function () {

    // If an error occurred or the user canceled the activity    alert("Can't view the image!");};

为你的应用注册 activity

如前述,你可以将你的应用设为某 activity 的处理器。有两种方法实现:

使用声明文件进行注册

{
    "name": "My App",
    "description": "Doing stuff",
    "activities": {
       "view": {
            "filters": {
                "type": "url",
                "url": {
                    "required": true,
                    "regexp":"/^https?:/"
                }
            }
        }
    }}

动态注册

var register = navigator.mozRegisterActivityHandler({
    name: "view",
    disposition: "inline",
    filters: {
        type: "image/png"
    }});register.onerror = function () {
  console.log("Failed to register activity");}

处理 activity:

navigator.mozSetMessageHandler("activity", function (a) {

    var img = getImageObject();

    img.src = a.source.url;

    /*      Call a.postResult() or a.postError() if      the activity should return a value    */});

可用的 activity

目前,以下 activity 可用:

  • configure

  • costcontrol/balance

  • costcontrol/data_usage

  • costcontrol/telephony

  • dial

  • new (比如 type: “websms/sms”, “webcontacts/contact”)

  • open

  • pick (比如 type: “image/png”)

  • record

  • save-bookmark

  • share

  • test

  • view

一些例子

拨号

var call = new MozActivity({
    name: "dial",
    data: {
        number: "10086"
    }});

写短信

var sms = new MozActivity({
    name: "new",
    data: {
        type: "websms/sms",
        number: "10086"
    }});

新建联系人

var newContact = new MozActivity({
    name: "new",
    data: {
        type: "webcontacts/contact",
        params: { // Will possibly move to be direct properties under "data"            giveName: "中国",
            familyName: "移动",
            tel: "10086",
            email: "cmcc@10086.cn",
            address: "北京",
            note: "这是附录",
            company: "CMCC"
        }
    }});

查看网页

var openURL = new MozActivity({
    name: "view",
    data: {
        type: "url", // Possibly text/html in future versions        url: "http://robertnyman.com"
    }});

保存书签

var savingBookmark = new MozActivity({
    name: "save-bookmark",
    data: {
        type: "url",
        url: "http://robertnyman.com",
        name: "Robert's talk",
        icon: "http://robertnyman.com/favicon.png"
    }});

试一试

现在,你可以试一试写一个调用 web activity 的 web app。你可以在 Firefox OS 模拟器里测试应用。

还在完善中

Web Activity 还在完善中,activity 的名称以及数据结构仍然可能改变。目前上面提到的东西,除了 mozRegisterActivityHandler 以及 mozSetMessageHandler 尚未实现,其他的都应当工作

转载:http://mozilla.com.cn/post/44499/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值