|
Pers.narod.ru. Тексты. Java2ME. Делаем проект на Java2ME для отправки SMS на список номеров |
Собственно, непроверенный остаток ныне ненужного кода.
Идея была простой - пользователь выбирает из списка нужный пункт (например, описание игры), приложение отправляет SMS указанного содержимого (например, цифровой код) на этот номер.
Опции проекта: MIDP2.0/CLDC1.0, подключнный Wireless Messaging API 1.1 (пакет JSR 120) и Mobile Media API (JSR 135). Компиливалось в WTK2.2
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class midlet extends MIDlet implements CommandListener {
private boolean isStarted = false;
Form main;
public Command Start,Exit;
public midlet() {
Start = new Command("Старт", Command.OK, 0);
Exit = new Command("Выход", Command.EXIT, 0);
main = new Form ("Демо");
//Здесь можно еще чего-нибудь добавить на главную форму
main.addCommand (Start);
main.addCommand (Exit);
main.setCommandListener (this);
}
protected void destroyApp(boolean unconditional) {}
protected void pauseApp() {}
protected void startApp() {
if (isStarted) { return; }
Display.getDisplay(this).setCurrent (main);
isStarted = true;
}
public void quit () {
System.gc();
destroyApp(true);
notifyDestroyed();
}
public void commandAction (Command c, Displayable d) {
if (c==Start) {
new SMSSend(this,main);
}
else {
quit ();
}
}
}//Требует включенной в среде опции "Wireless Messaging API (JSR120)"
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.wireless.messaging.*;
import java.io.IOException;
public class Sender implements CommandListener, Runnable {
Command sendCommand = new Command("Послать", Command.OK, 1);
Command backCommand = new Command("Назад", Command.BACK, 2);
Display display;
String smsPort;
String destinationAddress;
TextBox messageBox;
Displayable backScreen,sendingScreen;
String Log;
public Sender (String smsPort, Display display,
Displayable backScreen, Displayable sendingScreen,
String hdr, String msg) {
//Конструктор класса отправки SMS
this.smsPort = smsPort;
this.display = display;
this.destinationAddress = null;
this.backScreen = backScreen;
this.sendingScreen = sendingScreen;
messageBox = new TextBox(hdr, msg, 256, TextField.UNEDITABLE);
messageBox.addCommand(backCommand);
messageBox.addCommand(sendCommand);
messageBox.setCommandListener(this);
}
public void promptAndSend (String destinationAddress) {
//Показать бокс сообщения
this.destinationAddress = destinationAddress;
display.setCurrent(messageBox);
}
public void commandAction(Command c, Displayable s) {
//Реакция на кнопки
try {
if (c == backCommand) {
display.setCurrent(backScreen);
}
else if (c == sendCommand) {
display.setCurrent (sendingScreen);
messageBox.removeCommand(sendCommand);
Log="";
new Thread(this).start();
}
}
catch (Exception ex) {
//ex.printStackTrace();
Log+="Открытие:\n"+ex.getMessage()+'\n';
}
}
public void run() {
//Работа с потоком отправки сообщения
String address = destinationAddress + ":" + smsPort;
MessageConnection smsconn = null;
try {
smsconn = (MessageConnection)Connector.open(address);
TextMessage txtmessage = (TextMessage)smsconn.newMessage(MessageConnection.TEXT_MESSAGE);
txtmessage.setAddress(address);
txtmessage.setPayloadText(messageBox.getString());
smsconn.send(txtmessage);
}
catch (Throwable t) {
//System.out.println("Send caught: ");
//t.printStackTrace();
Log+="Отправка:\n"+t.getMessage()+'\n';
}
if (smsconn != null) {
try {
smsconn.close();
}
catch (IOException ioe) {
//System.out.println("Closing connection caught: ");
//ioe.printStackTrace();
Log+="Завершение:\n"+ioe.getMessage()+'\n';
}
}
}
}import javax.microedition.lcdui.*;
public class ShowBox extends TextBox implements CommandListener {
midlet midlet;
Displayable parent;
Command cmdBack;
public ShowBox (midlet midlet, Displayable parent, String hdr) {
super (hdr,"",256,TextField.UNEDITABLE);
this.midlet = midlet;
this.parent = parent;
cmdBack = new Command("Назад", Command.BACK, 1);
addCommand (cmdBack);
}
public void show (String s) {
setString (s);
Display.getDisplay(midlet).setCurrent (this);
setCommandListener (this);
}
public void commandAction (Command c, Displayable d) {
Display.getDisplay(midlet).setCurrent(parent);
}
}import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.wireless.messaging.*;
import java.io.IOException;
public class SMSSend implements CommandListener {
List main;
Image img=null;
Command exitCommand = new Command("Выход", Command.EXIT, 2);
Display display;
String smsPort;
Sender sender;
Displayable resumeScreen = null;
TextBox destinationAddressBox;
midlet midlet;
Displayable parent;
private static final int SMScount = 3; //Количество строк в SMSinfo!
private static String [][] SMSinfo = {
//Название игры (пункта меню), текст описания, номер телефона, содержимое сообщения
{ "Игра 1","Описание\nигры 1","+79139393418","1234" },
{ "Игра 2","Описание\nигры 2","+15550000","2" },
{ "Игра 3","Описание\nигры 3","+15550000","3" }
};
public SMSSend (midlet midlet, Displayable parent) { //Конструктор
this.midlet=midlet;
this.parent = parent;
display = Display.getDisplay(midlet);
smsPort = midlet.getAppProperty("SMS-Port");
try {
img=Image.createImage("/icon.png");
}
catch (java.io.IOException e) {
//new ShowBox (midlet, parent, "Ошибка").show (e.getMessage());
//return;
}
main = new List ("SMSBox!", List.IMPLICIT);
int i;
for (i=0; i<SMScount; i++) {
main.append (SMSinfo[i][0],img);
}
main.addCommand (exitCommand);
main.setCommandListener(this);
Display.getDisplay(midlet).setCurrent (main);
}
private static boolean isValidPhoneNumber(String number) {
//Проверка корректности number: возможно, лидирующий "+", затем цифры
char[] chars = number.toCharArray();
if (chars.length == 0) return false;
int startPos = 0;
if (chars[0]=='+') startPos = 1;
for (int i = startPos; i < chars.length; ++i) {
if (!Character.isDigit(chars[i])) return false;
}
return true;
}
private void promptAndSend (int selector) {
//Показать сообщение перед отправкой
String address = SMSinfo[selector][2];
if (!SMSSend.isValidPhoneNumber(address)) {
new ShowBox (midlet, parent, "Ошибка").show ("Неверный номер телефона "+selector);
return;
}
Alert sendAlert = new Alert("Отправка SMS", SMSinfo[selector][2], null, AlertType.INFO);
sendAlert.setTimeout(5000);
sender = new Sender (smsPort, display, main, sendAlert,
SMSinfo[selector][2], SMSinfo[selector][1]);
sender.promptAndSend("sms://" + address);
}
public void commandAction(Command c, Displayable s) {
try {
if (c==exitCommand || c==Alert.DISMISS_COMMAND) {
Display.getDisplay(midlet).setCurrent (parent);
}
else if (c==List.SELECT_COMMAND) {
promptAndSend(main.getSelectedIndex());
}
}
catch (Exception ex) {
new ShowBox (midlet, parent, "Ошибка").show (ex.getMessage());
return;
}
}
}
Архив ZIP с демо-мидлетом SMSBox (не проверен) (5 Кб)
Исходники проекта для среды WTK 2.2 (5 Кб)
Скачать WTK 2.2, прочитать о начале работы с мобильной явой в моей статье
|
|