JAVA ME WIRELESS MESSAGING - Студенческий научный форум

IX Международная студенческая научная конференция Студенческий научный форум - 2017

JAVA ME WIRELESS MESSAGING

Фролов М.В. 1
1Балаковский инженерно-технологический институт – филиал федерального государственного автономного образовательного учреждения высшего образования «Национальный исследовательский ядерный университет (МИФИ)»
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
ВВЕДЕНИЕ:

Темой данного реферата является Java ME Wireless Messaging, являющийся частью специального комплекта средств разработки мобильных приложений Java. Он представляет собой интерфейс мгновенной отправки и приёма сообщений.

JAVA ME

Для разработки мобильных Java ME приложений необходимо создать у себя на компьютере специальную среду разработки. Основу этой среды составляет Java ME – специальный комплект средств разработки.

Компактная версия платформы Java (Java ME) представляет собой надежную и настраиваемую среду для приложений, работающих на мобильных и встраиваемых устройствах: мобильных телефонах, цифровых приемниках, проигрывателях дисков Blu-ray, цифровых устройствах хранения данных, модулях M2M, принтерах и других устройствах.

Технология Java ME изначально разрабатывалась для преодоления ограничений, связанных с созданием приложений для компактных устройств. С этой целью компания Oracle разработала технологию Java ME, которая способна соответствовать подобным техническим ограничениям и позволяет создавать Java-приложения, работающие на компактных устройствах с ограниченным объемом памяти, диагональю экрана и зарядом аккумулятора.

Java ME разработана под руководством Sun Microsystems и является заменой похожей технологии — PersonalJava. Изначально спецификация разрабатывалась в рамках JCP (Java Community Process) как JSR 68. Позже её варианты развились в отдельные JSR. Sun предоставляет образец реализации (англ. reference implementation) спецификации, но до недавнего времени не предоставляла бесплатной реализации среды выполнения (англ. runtime environment) Java ME для мобильных устройств. 22 декабря 2006 исходный код Java ME был выпущен под лицензией GNU General Public License, проект получил название phoneME.

Отличительными особенностями устройств с ограниченными ресурсами являются ограниченная вычислительная мощность, ограниченный объём памяти, малый размер дисплея, питание от портативной батареи, а также низкоскоростные и недостаточно надёжные коммуникационные возможности. Типичный мобильный телефон середины двухтысячных содержит внутри 32-разрядный RISC-процессор с тактовой частотой 150—250 МГц, имеет объём оперативной памяти около 1—2 Мб, цветной дисплей размером 2 дюйма и имеет возможность соединения с Интернетом посредством GPRS или EDGE со скоростью до 474 кбит/с, которое при этом фундаментально ненадёжно, поскольку скорость передачи данных может неожиданно упасть, или соединение может быть вообще полностью потеряно.

В настоящее время существует несколько различных версий от разных производителей, их использование позволяет создавать мобильные приложения, заточенные под определенные телефоны и мобильные платформы. Соответственно доступные программисту JSR расширения и функциональные возможности среды разработки будут сильно зависеть от выбранного SDK.

Java ME специфицирует две базовые конфигурации, которые определяют требования к виртуальной машине (ограничение набора допустимых инструкций и др.), а также минимальный набор базовых классов: CLDC (Connected Limited Device Configuration — конфигурация устройства с ограниченными ресурсами и коммуникационными возможностями) и CDC (Connected Device Configuration — конфигурация устройства с нормальными ресурсами и коммуникационными возможностями).

Конфигурация CLDC успешно используется в большинстве современных мобильных телефонов и портативных органайзеров. По данным компании Sun Microsystems к концу 2004 года в мире было выпущено более 579 миллионов мобильных устройств с поддержкой этой конфигурации Java. Это делало Java ME доминирующей технологией Java в мире.

Платформа J2ME состоит главным образом из конфигураций и профилей, которые вместе образуют завершенную Java среду для ограниченных в ресурсах устройств с различными дополнительными возможностями. Иногда имеет смысл выделить программный интерфейс приложения (API) в отдельный пакет. В J2ME такие дополнительные пакеты содержат наборы классов и других ресурсов, которые могут использоваться профилями.

Java ME также определяет несколько так называемых профилей (англ. profiles), которые дополняют и расширяют упомянутые выше конфигурации, в частности, определяют модель приложения, возможности графического интерфейса, а также коммуникационные функции (например, доступ к Интернету) и др.

В настоящее время самой распространённой конфигурацией является CLDC, для которого разработан профиль MIDP (Mobile Information Device Profile — профиль для мобильного устройства с информационными функциями).

MIDP (англ. mobile information device profile) — профиль для мобильного устройства с информационными функциями (платформа J2ME). MIDP определяет понятие мидлета — компактного приложения на языке Java, имеющего небольшой размер (обычно менее 300 килобайт, хотя в последнее время размер java-игр может превышать 1 Мб), что делает его пригодным для передачи по сети и установки на мобильном устройстве.

Спецификация MIDP находится в постоянном развитии. В настоящее время существует несколько версий.

MIDP 1.0

JSR 37 — оригинальная спецификация, одобренная и опубликованная в сентябре 2000 года, которая обеспечивает основные функциональные возможности, требуемые мобильными приложениями, включая основной пользовательский интерфейс и безопасность сети. Эта версия считается устаревшей и постепенно выходит из употребления, хотя на рынке по прежнему появляются устройства, которые поддерживают MIDP 1.0 (в основном мобильные телефоны начального уровня, популярные в азиатских странах).

MIDP 2.0

JSR 118 — переработанная версия MIDP 1.0 спецификации, одобренная и опубликованная в ноябре 2002 года, Новые особенности включают расширенный пользовательский интерфейс, мультимедиа и функциональные возможности игр, улучшенные функции установки приложений по сети (англ. over-the-air provisioning, сокр. OTA), и усиленную и гибкую систему безопасности (англ. end-to-end security). MIDP 2.0 совместим с MIDP 1.0, и также предназначается для мобильных устройств: мобильных телефонов и КПК. В настоящее время эта версия является доминирующей и поддерживается большинством современных мобильных устройств.

MIDP 3.0

JSR 271 — дальнейшее развитие профиля MIDP. Эта спецификация вступила в стадию финального выпуска 9 декабря 2009 года.

Также существуют следующие варианты:

  • CLDC — конфигурация, на которой, как правило, базируется MIDP.

  • Java ME — описание платформы мобильной Java.

  • Sun Java Wireless Toolkit — базовый набор средств для разработки программ для мобильной Java.

  • Record Management System — API для постоянного хранения данных

Приложения, написанные для этого профиля, называются мидлетами (англ. MIDlet). Другим популярным профилем для CLDC является DoJa, разработанный фирмой NTT DoCoMo для её собственного сервиса iMode. iMode весьма распространён в Японии, и в меньшей степени в Европе и на Дальнем Востоке.

Oracle Java ME Embedded — это полноценный Java runtime, оптимизированный для устройств с ARM архитектурой и систем с ограниченными аппаратными возможностями. Java ME показывает себя во всей красе на платформах со слабыми вычислительными мощностями и небольшими ресурсами оперативной памяти, которые работают с сетевыми сервисами. Например, такими, как беспроводные модули, модули позиционирования, «умные» счетчики ресурсов, датчики мониторинга окружающей среды, вендинг-машины, телемедицина и, конечно, «умные» дома.

Использование Oracle Java ME в ваших проектах дает ряд интересных возможностей. Во-первых, главное преимущество Java — «write once, run everywhere» теперь работает и в случае встроенных устройств. Во-вторых, в платформу интегрирована система управления жизненным циклом приложений и его удаленного обновления на устройстве (AMS — application management system). В-третьих, вы получаете специальный API для доступа к периферии (DAAPI — Device Access API). В-четвертых, бесплатные инструменты разработки, что для встроенных систем случай нечастый (Java ME SDK для NetBeans и Eclipse). А также набор интегрированных в платформу стандартных сервисов: File I/O (JSR 75), Wireless Messaging (JSR 120), Web Services (JSR 172), Security and Trust Services Subset (SATSA – JSR 177), Location (JSR 179), XML (JSR 280).

Для того, чтобы у нас была возможность работать с интерфейсом I2C на Raspberry Pi. Необходимо загрузить соответствующий модуль.

Добавляем две строчки в /etc/modules

i2c-bcm2708

i2c-dev

Перегружаем плату.

Устанавливаем утилиты для работы с I2C

sudo apt-get install i2c-tools

Определяем адрес нашего устройства на шине I2C

sudo i2cdetect -y 1

IDE создаст для нас скелет Java ME приложения, которое наследуется от класса MIDlet и состоит из трех методов: startApp(), pauseApp() и destroyApp(boolean unconditional). Метод startApp() запустится при старте мидлета, в нем, для простоты, мы и напишем код нашего приложения.

Java ME Embedded предоставляет нам высокоуровневый API общения с переферией — DAAPI (Deveice Access API). Для работы с I2C нам нужно создать конфигурацию устройства, передать ее в фабрику PeripheralManager.open() и если все провода в порядке и Java запущена от root, мы получим экземпляр класса I2CDevice(), который даст нам возможность общаться с датчиком.

Чтобы запустить этот код на устройстве, нажмите правую кнопку мыши на вашей вашем проекте в NetBeans, выберите Run with… и в открывшемся окне Quick Project Run выберите вашу Raspberry. Или в свойствах проекта выберите во вкладке Platform выберите в качестве Device ваше устройство, тогда NetBeans будет деплоить приложение на Rapberry Pi по умолчанию при старте проекта.

JAVA ME WIRELESS MESSAGING

Как и все другие компоненты J2ME, дополнительные пакеты определены как Java Specification Requests (JSR) через Java Community Process. Одним из самых используемых J2ME пакетов, несомненно, является JSR-120 – Wireless Messaging API (WMA) (Интерфейс радио сообщений). Он используется приложениями для отправки и получения коротких текстовых и бинарных сообщений (SMS).

WMA основан на Generic Connection Framework (GCF), которая в свою очередь является частью Connected Limited Device Configuration (CLDC). GCF обеспечивает абстрактную структуру для реализации процессов ввода и вывода. На основе этой структуры строится ввод/вывод соединений, реализованных в профилях и дополнительных пакетах. Основная часть этого документа предполагает, что Вы немного знакомы с GCF. Если это не так, прочитайте сначала статью "Реализация соединения в CLDC". GCF - это часть Connected Device Configuration (CDC), поэтому вы можете использовать WMA на любом устройстве, поддерживающем J2ME (конечно, если производитель устройства включил в него необходимые классы).

WMA осуществляет передачу и получение сообщений по GSM или CDMA беспроводным сетям. Интерфейс использует коммуникационные возможности телефона. WMA поддерживает сервисы SMS и CBS. Хотя WMA сообщения похожи на датаграммы, интерфейс датаграмм не используется (который тоже является частью GCF и предназначен для реализации UDP соединений). Вместо этого WMA определяет новый набор интерфейсов (пакет javax.wireless.messaging).

Для отправки или получения сообщений, приложение должен сначала получить экземпляр MessageConnection интерфейса, используя механизмы подключений GCF. URL, содержащий информацию об используемом протоколе (SMS или CBS), номере телефона и порте адресата, передается методу javax.microedition.io.Connector.open(). Ниже приведены несколько примеров URL:

sms://+417034967891sms://+417034967891:5678sms://:5678cbs://:5678

В первых двух случаях URL открывает клиентские соединения, через которое приложение подключается к серверу на удаленном устройстве. Если порт не указан, применяется значение по умолчанию - порт текстовых сообщений. Третий URL открывает серверное соединение на локальном устройстве, и ожидает входящих сообщений от других устройств.Последний URL позволяет приложению получать широковещательные сообщения оператора сети.

Ниже приведен пример, создающий клиентское SMS соединение.

import javax.microedition.io.*;

import javax.wireless.messaging.*;

.....

MessageConnection conn=null;

String url="sms://+417034967891";

try{

conn=(MessageConnection) Connector.open( url);

// делаем что-нибудь с соединением

}

catch( Exception e){

// Если произошла ошибка

}

finally{

if( conn!=null){

try{ conn.close();} catch( Exception e){}

}

}

Для отправки сообщения используется метод MessageConnection.newMessage(), который создает пустое сообщение, добавляет в него полезную информацию (текст или бинарные данные) и вызывает метод MessageConnection.send() для его отправки.

public void sendText( MessageConnection conn, String text) throws IOException, InterruptedIOException{

TextMessage msg= conn.newMessage( conn.TEXT_MESSAGE);

msg.setPayloadText( text);

conn.send( msg);

}

Посылка бинарных данных практически идентична:

public void sendBinary( MessageConnection conn, byte[] data)

throws IOException, InterruptedIOException{

BinaryMessage msg=

conn.newMessage( conn.BINARY_MESSAGE);

msg.setPayloadData( data);

conn.send( msg);

}

Объем данных, которые можно переслать за одно подключение ограничен. Обычно размер SMS не превышает 160-170 символов, а если используются не английские символы - то еще меньше. Бинарные сообщения ограничены 140 байтами. Если размер сообщения превышает максимально возможный, WMA требуется поддержка каскадирования сообщений, что фактически означает еще большее ограничение объема сообщения. Чтобы определить можно ли отправить сообщение за один раз или его нужно разбить на несколько более мелких, используется метод MessageConnection.numberOfSegments().

Получать сообщения проще, чем отправлять. После открытия соединения, нужно вызывать метод receive(), который возвращает следующее доступное на указанном порте сообщение. Если доступных сообщений нет, метод блокируется до тех пор, пока не поступит новое сообщение или пока соединение не будет закрыто.

import java.io.*;

import javax.microedition.io.*;

import javax.wireless.messaging.*;

MessageConnection conn=null;

String url="sms://:5678";// Здесь должен быть указан только порт!

try{

conn=(MessageConnection) Connector.open( url);

while(true){

Message msg= conn.receive();// блоки

if( msg instanceof BinaryMessage){

byte[] data=

((BinaryMessage) msg).getPayloadData();

// что-нибудьделаем

}else{

String text=

((TextMessage) msg).getPayloadText();

// что-нибудьделаем

}

}

}

catch( Exception e){

// ошибка

}

finally{

if( conn!=null){

try{ conn.close();} catch( Exception e){}

}

}

WMA отвечает только за отправку и получение сообщений и никак их не интерпретирует. Как правило, для обмена данными между приложениями используются бинарные сообщения. Значительно облегчают жизнь методы DataInputStream, DataOutputStream, ByteArrayInputStream и ByteArrayOutputStream, которые позволяют эффективно кодировать и декодировать любые данные в бинарные сообщения и обратно.

ЗАКЛЮЧЕНИЕ

Таким образом, JSR-120 является достаточно удобным инструментом отправки мгновенных сообщений, особенно, когда к другим нет доступа, либо нужно отправить сообщение на другой конец света и при этом минимизировать затраты.

Просмотров работы: 355