Мобильная архивация Филипп Коряка Хакер, номер #075, стр. 075-114-4 Message - основной интерфейс для представления сообщений, из которого наследуются два следующих класса. TextMessage - класс текстового сообщения. BinaryMessage - класс бинарного сообщения. Следующий код осуществляет отправку SMS-сообщения c помощью этого API: try{ String addr = "sms://+1234567890"; MessageConnection conn = (MessageConnection) Connector.open (addr); TextMessage msg = (TextMessage)conn.newMessage (MessageConnection.TEXT_MESSAGE); msg.setPayloadText ("Hello World!"); conn.send (msg); } catch (Exception e) {} Как видишь, здесь все очень просто: 1. создаем соединение 2. создаем сообщение 3. отправляем сообщение 4. закрываем соединение В случае с отправкой кодированных по нашему методу сообщений, следует использовать класс BinaryMessage. Соответственно код преобразуется следующим образом: byte[] bin_msg; try{ String addr = "sms://+1234567890:5151"; MessageConnection conn = (MessageConnection) Connector.open (addr); BinaryMessage msg = (BinaryMessage)conn.newMessage (MessageConnection.BINARY_MESSAGE); msg.setPayloadData (bin_msg); conn.send (msg); } catch (Exception e) {} Обрати внимание на то, что в строке адреса появилось дополнение в виде ":5151". Это номер порта, на который следует отправлять СМСку. Дело в том, что существует два вида SMS-сообщений, в которых присутствует номер порта, и в которых его в помине нет. Сообщения первого типа принимаются стандартным ПО телефона. Сообщения второго типа, в свою очередь, должны обрабатываться соответствующими мидлетами настроенными на получение сообщений из данного порта. Если в момент поступления сообщения такой мидлет не запущен, то сообщение передается стандартному ПО мобилы. К примеру, получать все сообщения пришедшие на 5151 порт можно с помощью следующего простого кода: try{ String addr = "sms://:5151"; MessageConnection conn = (MessageConnection) Connector.open (addr); Message msg = null; while (!ex){ msg = conn.receive(); if (msg instanceof TextMessage){ TextMessage txt_msg = (TextMessage)msg; String text = txt_msg.getPayloadText(); txt_msg.setPayloadText ("Received: " + text); conn.send(txt_msg); } } } catch (Exception e) {} Тут ты можешь столкнуться с небольшой проблемой. Мидлет предназначенный для получения СМСок с определенного порта будет получать их только в то время когда он запущен. В случае если СМСка придет, когда мидлет не запущен, она перенаправится стандартному ПО телефона. Решением данной проблемы является использование технологии Push Registry, которая позволяет установить соответствие между мидлетом и некоторым портом. При поступлении информации в зарегистрированной специальным способом порт твой мидлет автоматически загрузится. Таким образом, получается некоторое подобие сервера. Для того, что бы связать определенный порт с мидлетом, следует добавить в jad-файл строчку вроде этой: MIDlet-Push-1: sms://:5151, sms_test, * Грубо говоря, в этой строке оговорено, что при поступлении сообщений типа sms на 5151 порт, необходимо активизировать мидлет sms_test и передать ему эти данные. Далее мидлет должен проводить декодирование и отображать сообщение в читабельном виде (с этой, достаточно сложной, но очень интересной проблемой предстоит разобраться тебе самому). Посмотреть на уже реализованное приложение, которое принимает, получает, кодирует и декодирует сообщения по описанному выше принципу можно на диске. |