WebTelephony API 和 WebSMS API – WebAPI 的一部分

正如在 Mozilla 的 Boot to Gecko - 网页就是平台Gaia,Mozilla 为 Boot to Gecko 提供的用户界面 中所讨论和展示的那样,网页正在成为一个非常强大的平台!因此,我想向您介绍我们 WebAPI 计划中的两个激动人心的 API:WebTelephonyWebSMS

WebTelephony

访问电话功能的基础很简单,只需通过 navigator.mozTelephony。一旦您获得了对该对象的引用,您就可以开始拨打和接听电话。以下是一些示例


// Telephony object
var tel = navigator.mozTelephony;

// Check if the phone is muted (read/write property)
console.log(tel.muted);

// Check if the speaker is enabled (read/write property)
console.log(tel.speakerEnabled);

// Place a call
var call = tel.dial("123456789");

// Events for that call
call.onstatechange = function (event) {
    /*
        Possible values for state:
        "dialing", "ringing", "busy", "connecting", "connected",
        "disconnecting", "disconnected", "incoming"
    */
    console.log(event.state);
};

// Above options as direct events
call.onconnected = function () {
    // Call was connected
};

call.ondisconnected = function () {
    // Call was disconnected
};

// Receiving a call
tel.onincoming = function (event) {
    var incomingCall = event.call;

    // Get the number of the incoming call
    console.log(incomingCall.number);

    // Answer the call
    incomingCall.answer();
};

// Disconnect a call
call.hangUp();


// Iterating over calls, and taking action depending on their changed status
tel.oncallschanged = function (event) {
    tel.calls.forEach(function (call) {
        // Log the state of each call
        console.log(call.state);
    });
};

Telephony 目前在 Gaia 的拨号器和主屏幕中可用。

WebSMS

手机中另一项核心功能是发送和接收短信。以下是如何做到这一点


// SMS object
var sms = navigator.mozSMS;

// Send a message
sms.send("123456789", "Hello world!");

// Recieve a message
sms.onrecieved = function (event) {
    // Read message
    console.log(event.message);
};

黑客和贡献

如果您有兴趣更深入地了解其内部工作原理,我建议您查看 Mozilla 为 Boot to Gecko 提供的用户界面,Gaia。在那里,您可以查看 dialer.js 文件和 sms.js 文件。

如果您认为也可以使用您的网页技术技能来开发和定制手机,请不要犹豫,查看并为 Gaia 贡献力量!

关于 Robert Nyman [名誉编辑]

Mozilla Hacks 的技术布道者和编辑。就 HTML5、JavaScript 和开放网页发表演讲和博客文章。Robert 是 HTML5 和开放网页的坚定支持者,自 1999 年以来一直在从事网页前端开发工作 - 在瑞典和纽约市。他还经常在 http://robertnyman.com 上发表博客文章,喜欢旅行和结识新朋友。

更多 Robert Nyman [名誉编辑] 的文章…


12 条评论

  1. Juarez

    1. 为什么不采用面向未来的设计?

    var tel = navigator.getDevice(“phone”);

    2. 如何处理像 LG Optimus Net Dual 或 Samsung Y Pro Duos 这样的双卡手机?

    2012 年 3 月 1 日 下午 1:15

    1. Robert Nyman

      1. 由于它是一个实验性 API,并且在标准化之前,它使用供应商前缀实现(因为当前实现和未来标准化的实现可能看起来不同)。
      2. 这个问题很棒!我认为这将触发手机上的原生行为,让您选择其中一个可用的 SIM 卡。

      2012 年 3 月 1 日 下午 1:29

      1. SignpostMarv

        为什么不使用 navigator.mozTelephony[0]、navigator.mozSMS[0] 等等?

        2012 年 3 月 1 日 下午 3:02

        1. Robert Nyman

          使用双卡?当然,但我猜大多数手机只会有一个,而且,我认为,最好让它更容易在大多数设备上进行编码,然后让那些有双卡的设备处理异常情况。

          2012 年 3 月 1 日 下午 3:19

          1. SignpostMarv

            让 mozTelephony/mozSMS 成为数组,并同时实现其子类型的功能?

            2012 年 3 月 1 日 下午 3:39

          2. Robert Nyman

            我的意思是,如果大多数手机没有双卡,使用数组对于开发者来说只会很繁琐。因此,我认为只使用一个对象(将来可能会有一个属性来访问双卡)似乎是一个更好的方法。

            2012 年 3 月 1 日 下午 3:44

  2. tack

    为了扩展 Juarez 的示例(var tel = navigator.getDevice(“phone”);),对于默认设备或备用设备来说,使用手机中的电话功能非常强大,但是给定一个参数,可以使用不同的连接。具体来说,我指的是 VoIP 和 Skype。例如,如果您在组织中有一个 Asterisk PBX,那么最好尝试使用公司 wifi 上的 SIP 连接到它,并在失败时回退到运营商提供的连接。此外,如果群件应用程序可以通过此 API 在桌面浏览器中提供电话功能,那就太好了。假设您是一家小企业... 一半的员工每月只使用一次办公电话... 让他们使用此功能,而那些经常使用电话的员工则使用昂贵的手机。

    2012 年 3 月 1 日 下午 4:16

    1. Robert Nyman

      我同意,这绝对很有趣!不确定这种特定语法是否有帮助,但肯定值得考虑。

      2012 年 3 月 1 日 下午 4:25

  3. David Higgins

    我一直很好奇 Gaia 演示将如何与电话本身交互。当我看到 Paul 的演示时,我一直在挠头,想知道这种“网页技术”如何与电话运营商对话。现在,在看到这篇文章后,一切都变得非常清楚。

    BTG 为 Mozilla 开发者提出了新问题,因为现在他们可以用它做任何事。它不一定要是手机。

    随着平板电脑的出现,有空间可以构建基于此的完整操作系统。我们甚至还有 Chris 所说的“糟糕的 Windows 98 屏保”的武器库,也就是画布 API,所以不缺可以添加到操作系统屏保部分的图形,:)

    我也喜欢 BTG 完全不受 Android 影响的方式。我一直不喜欢 Java,也不喜欢 Android 更新过于频繁的方式,因此需要每 8-10 个月左右购买一台全新的设备,以接收 Android 的新炫目更新。

    希望 BTG 将有一个更好、更方便的发布周期。

    当然,我可以手动安装新 Android,但是,我很懒,对此很自豪。

    -Higg

    2012 年 3 月 1 日 下午 4:28

    1. Robert Nyman

      很高兴你喜欢它!
      是的,毫无疑问,可以实现和定制的事物的影响力是巨大的!

      2012 年 3 月 1 日 下午 4:34

  4. pd

    很高兴看到 Mozilla 似乎正在采用更简单的 jQuery 风格语法,而不是那种糟糕的旧 [@mozill.org;getServices] 等等。

    2012 年 3 月 2 日 上午 5:43

    1. Robert Nyman

      我不确定我会称其为 jQuery 风格 - 许多 DOM 方法在很长一段时间内看起来都很相似 - 但我绝对同意我们应该始终努力实现简洁易读的语法。

      2012 年 3 月 2 日 上午 5:48

本文的评论已关闭。