motofan logo
> 

Отправка Смс Из Джава Приложения

lv333
сообщение 23.2.2006, 12:41


Ветеран
*****

Группа: Пользователи
Сообщений: 656
Регистрация: 11.7.2005
Из: Украина, Киев
Пользователь №: 45 916
Модель телефона: Motorola Defy+
Прошивка: СМ 10

Рейтинг: 199.6



Информация взята отсюда 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 и передать ему эти данные. Далее мидлет должен проводить декодирование и отображать сообщение в читабельном виде (с этой, достаточно сложной, но очень интересной проблемой предстоит разобраться тебе самому). Посмотреть на уже реализованное приложение, которое принимает, получает, кодирует и декодирует сообщения по описанному выше принципу можно на диске.


Вопрос к кодерам - будет ли все это работать на мотороле?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
 
Ответ в темуСоздание новой темы
Ответов(1 - 9)
belpilgrim
сообщение 23.2.2006, 14:59


Мастер
****

Группа: Пользователи
Сообщений: 193
Регистрация: 14.10.2005
Из: Беларусь
Пользователь №: 54 460
Модель телефона: HTC G1, E770
Прошивка: 1.5 v3, VistaRTM

Рейтинг: 117



Будет работать. Поддержка Push Registry есть. А отправка бинарных смс стандартная фича.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
lv333
сообщение 23.2.2006, 15:11


Ветеран
*****

Группа: Пользователи
Сообщений: 656
Регистрация: 11.7.2005
Из: Украина, Киев
Пользователь №: 45 916
Модель телефона: Motorola Defy+
Прошивка: СМ 10

Рейтинг: 199.6



Цитата(belpilgrim @ Четверг, 23 Февраля 2006, 17:59)
Будет работать. Поддержка Push Registry есть. А отправка бинарных смс стандартная фича.
*


Т. е. по приему смс на определенный порт можно запустить аплет если у него в джад файле прописано
нечто вроде этого "MIDlet-Push-1: sms://:5151, sms_test, *"?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
belpilgrim
сообщение 23.2.2006, 20:08


Мастер
****

Группа: Пользователи
Сообщений: 193
Регистрация: 14.10.2005
Из: Беларусь
Пользователь №: 54 460
Модель телефона: HTC G1, E770
Прошивка: 1.5 v3, VistaRTM

Рейтинг: 117



Ну грубо говоря, да.
Цитата
Dinamic Registration

  It uses the PushRegistry class, that includes the following
  capabilities:

- Register
- Unregister
- Consult
- Among others

Static Registration

  It shall be done before the midlet has been launched.
  To register through the JAD file, repeat the line below for each
  connections string or midlet (in the same midlet suite) that you
  wish to register.

      MIDlet-Push-< n >: < Connection String >, < Full Qualified MIDlet Class Name >, < Allowed Sender >
         
  < n >                                -->  1, 2, ... 
  < Connection String >                -->  sms://:1234, sms://:4321 ...
  < Full Qualified MIDlet Class Name >    -->  org.example.application.MyMIDlet
  < Allowed Sender >                      -->  +12345678, allow the use of wildcards "?" for one digit, or "*" for any string

(*)  The mechanism that is supported for push by Motorola implementation is SMSpush.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
RusBiT
сообщение 24.2.2006, 5:24


МотоКрасноярец
*****

Группа: Пользователи
Сообщений: 431
Регистрация: 29.3.2005
Из: Красноярск
Пользователь №: 39 770
Модель телефона: (M) a1200
Прошивка: Kernel 2.4 :)

Рейтинг: 214.5



lv333,
Довольно интересная тема. Ждем что скажут кодеры.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
grafmoto
сообщение 24.2.2006, 10:56


ЯваМотоКодер
********

Группа: Почётные мотофаны
Сообщений: 2 003
Регистрация: 15.10.2004
Из: Северодвинск
Пользователь №: 16 752
Модель телефона: iPhone 3Gs
Прошивка: iOS 6.1.3

Рейтинг: 703



Цитата(lv333 @ Четверг, 23 Февраля 2006, 16:41)
Вопрос к кодерам - будет ли все это работать на мотороле?
*


если ты про отправку вообще спрашиваешь, то работает - SMSAlarm. с портом тоже работает, но обычным способом сообщение естестно не принять, нужно писать "клиента". push registry тоже работает, но выскакивает разрешение на запуск.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
lv333
сообщение 24.2.2006, 12:50


Ветеран
*****

Группа: Пользователи
Сообщений: 656
Регистрация: 11.7.2005
Из: Украина, Киев
Пользователь №: 45 916
Модель телефона: Motorola Defy+
Прошивка: СМ 10

Рейтинг: 199.6



Цитата(grafmoto @ Пятница, 24 Февраля 2006, 13:56)
если ты про отправку вообще спрашиваешь, то работает - SMSAlarm. с портом тоже работает, но обычным способом сообщение естестно не принять, нужно писать "клиента". push registry тоже работает, но выскакивает разрешение на запуск.
*



Т. е. по приходу смс на нужный порт телефон сначала спросит можно ли запустить приложения, по аналогии с запуском через планировщик?
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
grafmoto
сообщение 25.2.2006, 8:37


ЯваМотоКодер
********

Группа: Почётные мотофаны
Сообщений: 2 003
Регистрация: 15.10.2004
Из: Северодвинск
Пользователь №: 16 752
Модель телефона: iPhone 3Gs
Прошивка: iOS 6.1.3

Рейтинг: 703



Цитата(lv333 @ Пятница, 24 Февраля 2006, 16:50)
Т. е. по приходу смс на нужный порт телефон сначала спросит можно ли запустить приложения, по аналогии с запуском через планировщик?
*


такое приложение для начала должно быть зарегистрировано в телефоне, ну что б он знал что запускать. при использовании PushRegistry:
registerAlarm(String midlet, long time) или registerConnection(String connection, String midlet, String filter) будет выскакивать подтверждение запуска приложения (это я проверял давно, когда еще не было патчей). а после патча, в разрешениях приложения есть пункт автозапуск, возможно это и решит проблемы (тестовое приложение было жестоко грохнуто, нужно наваять заново). есть еще вариант регистрации (пример из хелпаря): MIDlet-Push-1: socket://:79, com.sun.example.SampleChat, *
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
SL.Hunter
сообщение 8.6.2006, 10:09


Опытный
***

Группа: Пользователи
Сообщений: 108
Регистрация: 21.1.2005
Из: Солнечная Система, Земля, Россия, Тюменская обл., ЯНАО, г. Новый Уренгой, п. Лимбяяха
Пользователь №: 35 371
Модель телефона: C650

Рейтинг: 9



Тема интересная smile.gif Просьба к джава програмистам сделайте хоть простенькую програмку для проверки, допустим одна принимает а другая отправвляет сообщение с порта на порт
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
grafmoto
сообщение 8.6.2006, 12:46


ЯваМотоКодер
********

Группа: Почётные мотофаны
Сообщений: 2 003
Регистрация: 15.10.2004
Из: Северодвинск
Пользователь №: 16 752
Модель телефона: iPhone 3Gs
Прошивка: iOS 6.1.3

Рейтинг: 703



еще одну спящую тему разбудили :) давным-давно уже все проверено - работает.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Отправка Смс Из Джава Приложения · Разработка Java-приложений · Forum
 

Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 28.7.2025, 16:04

Форум живёт: