Для того чтобы сделать телефонный звонок из приложения в Palm WebOS есть только один способ – вызвать приложение Phone (стандартную звонилку) с помощью Application Manager. Пользователь обязательно должен подтвердить выполнение звонка, нажав кнопку дозвона. Выполнить звонок без подтверждения, возможности нет.

В API предусмотрена возможность запуска приложения дозвона с предварительной установкой телефонного номера, а также возможность запуска без установки параметров. Как использовать это API – смотрим ниже:

Для начала создадим приложение и в нем сцену с названием Call. Как создать приложение и сцену в нем, можно узнать здесь.

app/views/call/call-scene.html

<div class="palm-group">
  <div class="palm-group-title">Phone number</div>
  <div class="palm-row">
    <div class="palm-row-wrapper textfield-group" x-mojo-focus-highlight="true">
      <div class="title">
        <div class="label">Number</div>
        <div id="PhoneNumber" x-mojo-element="TextField"></div>
      </div>
    </div>
  </div>
</div>
<div id="DialerButton" x-mojo-element="Button"></div>
<div id="CallButton" x-mojo-element="Button"></div>
<div id="ExitButton" x-mojo-element="Button"></div>

Наша сцена содержит группу, в которой находится текстовое поле, а также три кнопки:

  • Кнопку запуска приложения дозвона без параметров
  • Кнопку запуска приложения дозвона с предустановленным номером (для завершения звонка необходимо нажать кнопку дозвона)
  • Кнопку для выхода из приложения.

app/assistants/call-assistant.js

function CallAssistant() {
}

CallAssistant.prototype.setup = function() {
    this.controller.setupWidget("PhoneNumber",
    {
        modelProperty: 'originalValue'
    },
    this.phoneNumberTextModel =
    {
        originalValue: ''
    });
    this.controller.setupWidget("DialerButton", {}, {label:"Launch dialer"});
    this.controller.setupWidget("CallButton", {}, {label:"Call"});
    this.controller.setupWidget("ExitButton", {}, {label:"Exit"});
}

После запуска приложение у нас должно получиться что-то подобное:
WebOS Dialer Sample

Теперь посмотрим как можно запустить приложение дозвона без параметров:

CallAssistant.prototype.handleDialerButton = function(event) {
    this.controller.serviceRequest('palm://com.palm.applicationManager',
    {
        method:'launch',
        parameters:
        {
            id:"com.palm.app.phone"
        }
    });
}

Мы вызываем метод launch сервиса Application Manager и указываем ему уникальный идентификатор приложения дозвона.

Теперь посмотрим как при запуске приложения дозвона можно указать телефонный номер:

CallAssistant.prototype.handleCallButton = function(event) {
    if (this.phoneNumberTextModel.originalValue.length < 7) {
        this.controller.showAlertDialog(
        {
            onChoose: function(value){},
            title: 'Error',
            message: 'Phone number should contain at least 7 digits',
            choices: [{label:'OK'}]
        });
        return;
    }
    this.controller.serviceRequest("palm://com.palm.applicationManager",
    {
        method : 'open',
        parameters:
        {
            target: "tel://" + this.phoneNumberTextModel.originalValue
        }
    });
}

Для начала, перед запуском мы проверяем длину значения в текстовом поле. Если она меньше 7ми символов, то выводим уведомление об ошибке.
Для запуска приложения дозвона мы используем метод open сервиса Application Manager и в качестве параметра скармливаем ему объект, свойство target которого содержит телефонный номер и префикс “tel://”.

Не забываем, также, что для всех кнопок нужно регистрировать обработчики в методе setup() и отключать их в методе сleanup().

CallAssistant.prototype.setup = function() {
...
    Mojo.Event.listen(this.controller.get("DialerButton"),
        Mojo.Event.tap, this.handleDialerButton.bind(this));
    Mojo.Event.listen(this.controller.get("CallButton"),
        Mojo.Event.tap, this.handleCallButton.bind(this));
    Mojo.Event.listen(this.controller.get("ExitButton"),
        Mojo.Event.tap, this.handleExitButton.bind(this));
}

CallAssistant.prototype.handleExitButton = function(event) {
    this.controller.stageController.getAppController().closeAllStages();
    window.close();
}

CallAssistant.prototype.cleanup = function(event) {
    Mojo.Event.stopListening(this.controller.get("DialerButton"),
        Mojo.Event.tap, this.handleDialerButton.bind(this));
    Mojo.Event.stopListening(this.controller.get("CallButton"),
        Mojo.Event.tap, this.handleCallButton.bind(this));
    Mojo.Event.stopListening(this.controller.get("ExitButton"),
        Mojo.Event.tap, this.handleExitButton.bind(this));
}

После всех проделанных действий, после нажатия на кнопку Call, получим что-то вроде этого:

WebOS Phone Application GUI

На этом все.

Скачать исходный код приложения.

Previous ArticleNext Article
Технический директор IT-Dimension, компании-разработчика кросс-платформенного программного обеспечения

Leave a Reply

Your email address will not be published. Required fields are marked *

А.

Анонсирована первая книга по программированию для Palm webOS

Palm webOS BookВ блоге разработчиков Palm webOS появился анонс первой книги по программированию для этой ОС.
Называется книга “Palm webOS: Developing Applications in JavaScript Using the Palm Mojo Framework”.

Первая глава книги доступна для загрузки в формате PDF на сайте разработчиков Palm webOS.

Еще одна хорошая новость: 25го февраля в 22.00 (10 a.m. PT) состоится вебкаст с обзором средств разработки для Palm webOS.

Лень искать?

Скачать первую главу книги прямо здесь.

С.

Симуляция аппаратных событий в эмуляторе Palm WebOS

В эмуляторе WebOS есть возможность программно симулировать аппаратные события, например входящий телефонный звонок, входящее SMS или изменение GPS-координат. Такая возможность может быть полезна, например, при отладке приложений, использующих GPS.

Для симуляции аппаратных событий в Palm Mojo SDK используется утилита luna-send, которая отправляет сообщения сервису pmradiosimulator в эмуляторе. Об использовании утилиты luna-send и пойдет речь в этот раз.

Синтаксис вызова luna-send
luna-send -n 1 URL JSON_object

Параметр URL позволяет указать аппаратное событие, которое должно быть симулировано. Параметр JSON_object позволяет указать параметры вызова сервиса pmradiosimulator.

Примеры использования

Симуляция входящего телефонного звонка:

luna-send -n 1 luna://com.palm.pmradiosimulator/set_incomingcall {\"number\":\"14086177431\"}
Симуляция входящего SMS:
luna-send -n 1 luna://com.palm.pmradiosimulator/set_incomingsms {\"number\":\"4086177431\",\"
message\":\"'Hello World! Incoming SMS.'\"}
Изменение GPS-координат
luna-send -n 1 luna://com.palm.pmradiosimulator/set_position {\"lat\":\"37.3\",\"long\":\"-122\"}
Изменение оператора сотовой связи (применяется после перезагрузки)
luna-send -n 1 luna://com.palm.pmradiosimulator/set_operator {\"operator\":\"Sprint\"}

GPS AutoDrive

Фyкция GPS AutoDrive в эмуляторе позволяет использовать CSV-файл с записанным GPS-треком при запросе координат приложениями, использующими GPS. Таким образом можно симулировать передвижение по заданному маршруту.

Запуск функции AutoDrive
luna-send -n 1 luna://com.palm.pmradiosimulator/autodrive/start {}

Если имя CSV-файла с запиью трека не указано, то будет использоваться файл /var/lib/til/AutoDrive_DefaultRoute.csv.

Остановка режима AutoDrive
luna-send -n 1 luna://com.palm.pmradiosimulator/autodrive/stop {}

После остановки AutoDrive координаты GPS будут установлены в значения по умолчанию (Palm Sunnyvale).

Установить AutoDrive в реверсный режим
luna-send -n 1 luna://com.palm.pmradiosimulator/autodrive/reverse {}
Приостановить AutoDrive
luna-send -n 1 luna://com.palm.pmradiosimulator/autodrive/pause {}
Восстановить режим AutoDrive после паузы
luna-send -n 1 luna://com.palm.pmradiosimulator/autodrive/resume {}
Ускорить режим AutoDrive
luna-send -n 1 luna://com.palm.pmradiosimulator/autodrive/speedup {}
Замедлить режим AutoDrive
luna-send -n 1 luna://com.palm.pmradiosimulator/autodrive/slowdown {}

CSV-файл трека

По умолчанию для задания GPS-трека используется файл AutoDrive_DefaultRoute.csv. Для того, чтобы указать другой файл трека, необходимо вызвать функцию set_route сервиса pmradiosimulator:

luna-send -n 1 luna://com.palm.pmradiosimulator/autodrive/set_route \{\"route\":\"/var/lib/MyGpsRoute.csv\"}

Формат CSV-файла трека описан здесь.