Информация взята отсюда http://www.xakep.ru/magazine/xa/075/114/4.asp
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 и передать ему эти данные. Далее мидлет должен проводить декодирование и отображать сообщение в читабельном виде (с этой, достаточно сложной, но очень интересной проблемой предстоит разобраться тебе самому). Посмотреть на уже реализованное приложение, которое принимает, получает, кодирует и декодирует сообщения по описанному выше принципу можно на диске.
Вопрос к кодерам - будет ли все это работать на мотороле?
Код
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 и передать ему эти данные. Далее мидлет должен проводить декодирование и отображать сообщение в читабельном виде (с этой, достаточно сложной, но очень интересной проблемой предстоит разобраться тебе самому). Посмотреть на уже реализованное приложение, которое принимает, получает, кодирует и декодирует сообщения по описанному выше принципу можно на диске.
Вопрос к кодерам - будет ли все это работать на мотороле?