Хочу сделать мидлет под мобильный телефон. С программированием сталкивался очень косвенно но очень интересно.
Есть подземная парковка на 40 парковочных мест с въездом и выездом.
Задача:
1. Сделать обнаружение URL Bluetooth устройств.
2. Сровнять обнаружение номера с базой
3. При совпадении открыть створчатые ворота и держать их в том состоянии пока устройство не пропадет с поля зрения или если оно в поле зрения больше часа то исключить его до того момента пока оно не пропадет и не появится вновь.
Как я вижу это в своей голове.
Берем телефон Сони Ериксон с Bluetooth и IR портом. Пишем Java приложение под него и делаем IR приемник с управляющими выходами и входами.
Какая сейчас ситуация:
Застрял на java? Англ. Немного хромает а на русском инфы мало. Мож кто поможет?
Нашел вот исподники: они устройства находят а переделать пока опыта не хватает. Может как-то поэтапно объясните что за чем делать и как вообще прогу сложить.
/*
* начнем, пожалуй.
*
*/
/*
* строка import - подключение библиотек.
*/
import javax.microedition.midlet.*; // для возможности работы мидлетов в телефоне
import javax.microedition.lcdui.*; // для работы с компонентами мидлетов
import javax.bluetooth.*; // и так понятно - для блютуса
import java.io.*; // для отлова ошибок (в нашем случае)
import javax.microedition.io.*; // для работы с потоками
/**
*
* @author ToniPizecato
*/
public class WET extends MIDlet implements CommandListener
// всемдоступный класс WET, расширенный до Мидлета, обеспечивающий ПрослушиваниеКоманд
{
//////////////////////////////////////////// объявление переменных
// UUID - уникальный идентификатор
private static final String UUID_STRING = "11112233445566778899AABBCCDDEEFF";
// команды
private Command exitCommand1;
private Command searchCommand1;
private Command backCommand1;
private Command selectCommand1 = null;
private Command connectCommand1 = null;
// алерт - для сигнализации ошибок
private Alert alert1;
// две формы, в которые мы помещаем свои элементы
private List list1; // для найденных блютус девайсов
private List list2; // для найденных сервисов девайсов
private KeyCanvas kc; // для работы с джойстиком и отрисовки
// эти два для нахождения.
private LocalDevice local = null;
private DiscoveryAgent agent = null;
private RemoteDevice rDevices[]; // сюда будем записывать найденные
public String url; // адрес найденного девайса.
// для красоты
private Image imgSq = null;
private Image imgSq2 = null;
public Image imgSubSq = null;
public Image imgError = null;
//////////////////////////////////////////// объявление переменных
/** Создаем наш пример */
public WET()
{
getDisplay().setCurrent(get_list1()); // отображаем наш Лист1 при открытии программы
}
// как мы будем реагировать на команды ( не нажатия кнопок!!)
public void commandAction(Command command, Displayable displayable)
{
if (displayable == list1) { // когда мы в форме Лист1
if (command == exitCommand1) {exitMIDlet();}// если команда Выйти
else if (command == searchCommand1) {searchDevices();}// если команда НайтиДевайсы
else if (command == connectCommand1){connect();} // если команда Подключиться
else if (command == selectCommand1) {serviceSearch(); }// если команда Найти Сервисы
}
else if (displayable == list2) // когда мы в форме Лист2
{
if (command == backCommand1){getDisplay().setCurrent(get_list1());} // вернуться в форму Лист1
}
}
public Display getDisplay() { return Display.getDisplay(this); } // для простоты переключения форм
public void exitMIDlet() { // функция выхода. подметает за собой.
getDisplay().setCurrent(null);
destroyApp(true);
notifyDestroyed();
}
//////////////////////////////////////////// опреденеие Листов1,2
public List get_list1() { // определяем необходимые данные для Листа1
if (list1 == null) {
list1 = new List(null, Choice.IMPLICIT, new String[0], new Image[0]);
list1.addCommand(get_exitCommand1()); // добавляем команды в форму Лист1
list1.addCommand(get_searchCommand1()); // добавляем команды в форму Лист1
list1.setCommandListener(this); // делаем так, чтобы Лист1 слушал эти команды
list1.setSelectedFlags(new boolean[0]);
}
return list1;
}
public List get_list2() {
if (list2 == null) {
list2 = new List("Сервисы", Choice.IMPLICIT, new String[0], new Image[0]);
list2.addCommand(get_backCommand1());
list2.setCommandListener(this);
list2.setSelectedFlags(new boolean[0]);
}
return list2;
}
//////////////////////////////////////////// опреденеие Листов1,2
//////////////////////////////////////////// опреденеие Команд
public Command get_exitCommand1() {
if (exitCommand1 == null) {
exitCommand1 = new Command("Выход", Command.EXIT, 1);
}
return exitCommand1;
}
public Command get_searchCommand1() {
if (searchCommand1 == null) {
searchCommand1 = new Command("Поиск устройств", Command.OK, 1);
}
return searchCommand1;
}
public Command get_selectCommand1() {
if (selectCommand1 == null) {
selectCommand1 = new Command("Поиск сервисов", Command.OK, 1);
}
return selectCommand1;
}
public Command get_connectCommand1() {
if (connectCommand1 == null) {
connectCommand1 = new Command("Соединение и управление", Command.OK, 1);
}
return connectCommand1;
}
public Command get_backCommand1() {
if (backCommand1 == null) {
backCommand1 = new Command("Назад", Command.BACK, 1);
}
return backCommand1;
}
//////////////////////////////////////////// опреденеие Команд
public void startApp() // что происходит при загрузке мидлета
{
try
{
// инифиализируем блютус
local = LocalDevice.getLocalDevice();
agent = local.getDiscoveryAgent();
}
catch(BluetoothStateException bse)
{
// ловим ошибки и закрываем.
al("Ошибка: "+bse.getMessage());
try{Thread.sleep(1000);}
catch(InterruptedException ie){}
notifyDestroyed();
}
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
//////////////////////////////////////////// функция поиска девайсов
private void searchDevices()
{
try
{
list1.deleteAll();
list1.append("Поиск устройств...",null);
list1.removeCommand(searchCommand1);
list1.removeCommand(connectCommand1);
list1.removeCommand(selectCommand1);
// определяем класс обнаружения девайсов
DeviceDiscoverer discoverer = new DeviceDiscoverer(WET.this);
try
{
//тут агент ищет девайсы
agent.startInquiry(DiscoveryAgent.GIAC,discoverer);
}
catch(IllegalArgumentException iae){al("BluetoothStateException:"+iae.getMessage());}
catch(NullPointerException npe){al("BluetoothStateException:"+npe.getMessage());}
}
catch(Exception e){al(e.getMessage()); list1.addCommand(searchCommand1);}
}
// добавляем в Лист1 то, что нашли, когда поиск закончился
public void deviceInquiryFinished(RemoteDevice[] rDevices,String message)
{
list1.deleteAll();
this.rDevices = rDevices;
String deviceNames[] = new String[rDevices.length];
for(int k=0;k<rDevices.length;k++)
{
try
{
deviceNames[k] = rDevices[k].getFriendlyName(false);
list1.append(deviceNames[k], imgSq);
}
catch(Exception e){al(e.getMessage());}
}
getDisplay().setCurrent(get_list1());
if(rDevices.length > 0)
{
list1.addCommand(get_selectCommand1());
list1.addCommand(get_connectCommand1());
}
else{list1.append("Нет устройств", imgError);}
list1.addCommand(get_searchCommand1());
}
//////////////////////////////////////////// функция поиска девайсов
//////////////////////////////////////////// функция поиска сервисов
private void serviceSearch()
{
getDisplay().setCurrent(get_list2());
list2.deleteAll();
list2.append(list1.getString(list1.getSelectedIndex())+"'с сервиса", imgSq2);
url = null;
int index = list1.getSelectedIndex();
//list1.removeCommand(selectCommand1);
ServiceDiscoverer serviceDiscoverer = new ServiceDiscoverer(WET.this);
int[] attrSet = {0x0100};
UUID[] uuidSet = new UUID[1];
uuidSet[0] = new UUID(UUID_STRING, false);
try {
agent.searchServices(attrSet, uuidSet, rDevices[index], serviceDiscoverer);
}catch(BluetoothStateException bse) {al("Ошибка: " + bse.getMessage());}
//catch(Exception bse) { al("Ошибка: " + bse.getMessage()); }
}
// добавляем в Лист2 то, что нашли, когда поиск закончился
public void serviceSearchCompleted(ServiceRecord service,String message)
{
//this.service = service;
try
{
if(message=="Service search complited")
{
url = service.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT,false);
//list2.append(message,null);
//list2.append(url,null);
}
else
{
list2.append(message,imgError);
}
}
catch (IllegalArgumentException iae1){}
}
//////////////////////////////////////////// функция поиска сервисов
// коннектимся к девайсу
private void connect()
{
list1.removeCommand(exitCommand1);
list1.removeCommand(searchCommand1);
list1.removeCommand(selectCommand1);
list1.removeCommand(connectCommand1);
/*еще раз ищем сервисы, потому что эта функция, при нахождении
* сервиса serial port (btspp) у девайса, узнает его адрес url
*/
serviceSearch();
try
{
Thread.sleep(3000); // делаем задержку. т.к. url не успевает определиться
if(url != null)
{ // открываем Канвас, если url не пустой.
kc = new KeyCanvas();
getDisplay().setCurrent(kc);
}
}
catch(Exception bse) { al("Error: " + bse.getMessage()); }
list1.addCommand(exitCommand1);
list1.addCommand(searchCommand1);
list1.addCommand(connectCommand1);
list1.addCommand(selectCommand1);
}
// Алерт для удобства использования
public void al(String s)
{
alert1 = new Alert(null, s, null, null);
alert1.setImage(imgError);
alert1.setTimeout(-2);
getDisplay().setCurrent(alert1);
}
//////////////////////////////////////////// Канвас
// Обрабатываем клавиши и джойстик
private class KeyCanvas extends Canvas implements CommandListener
{
private String message = "Press any key";
private int w = getWidth(), h = getHeight(), x=20, y=20, k=10;
// входные, выходные потоки для отправки байтов
public InputStream in = null;
public OutputStream out = null;
public StreamConnection con = null;
private byte[] buffer = null; // буффер данных
/** Creates a new instance of KeyCanvas */
public KeyCanvas()
{
this.addCommand( new Command("Close", Command.ITEM, 1 ) );
this.setCommandListener(this);
try
{
// если канал открыт - закрыть его и открыть заново
if(con!=null) con.close();
if(out!=null) out.close();
if(in!=null) in.close();
con = (StreamConnection)Connector.open(url);
out = con.openOutputStream();
in = con.openDataInputStream();
}
catch(Exception e){al(e.getMessage());}
}
// реакция на нажатие джойстика и клавиш
public void keyPressed(int keyCode)
{
if((getGameAction(keyCode) == UP) || (getGameAction(keyCode) == KEY_NUM2)) // вверх, 2
{ message = "UP"; if (y > 0) {y=y-k;} }
if((getGameAction(keyCode) == DOWN) || (getGameAction(keyCode) == KEY_NUM8))//вниз,8
{ message = "DOWN"; if (y < getHeight() - k) {y=y+k;} }
if((getGameAction(keyCode) == RIGHT) || (getGameAction(keyCode) == KEY_NUM6))//вправо,6
{message = "RIGHT"; if (x < getWidth() - k) {x=x+k;} }
if((getGameAction(keyCode) == LEFT) || (getGameAction(keyCode) == KEY_NUM4))//влево,4
{ message = "LEFT"; if (x > 0) {x=x-k;} }
try
{
//пишем в порт
out.write(message.getBytes());
out.flush();
//in.read(buffer);
}
catch(IOException e){al(e.getMessage());}
repaint(); // перерисовываем с новыми значениями x,y
}
// перерисовка
protected void paint(Graphics g)
{
String s = String.valueOf(buffer);
if(s==null){s="none";}
g.setColor( 255, 255, 255 );
g.fillRect( 0, 0, w, h );
g.setColor( 0, 0, 0 );
g.drawString( message, w/2, 1, g.TOP | g.HCENTER );
g.drawString( String.valueOf(x)+" : "+String.valueOf(y), w/2, h-20, g.TOP | g.HCENTER );
g.drawRect(x-3,y-3,6,6);
g.drawString( s, w/2, h/2, g.TOP | g.HCENTER );
}
public void commandAction( Command c, Displayable d){ closeCanvas(); }
public void closeCanvas()
{
try
{
if(in != null){in.close();}
if(out != null){out.close();}
if(con != null){con.close();}
getDisplay().setCurrent(get_list1());
}
catch(IOException e){al(e.getMessage());}
}
}
//////////////////////////////////////////// Канвас
}
также есть порога на java но у нее нет исходного кода она делает что-то наподобие. Не могу понять как код выдрать и можно ли это делать быстро? Вот она

нету только базы сравнения и передачи на ирду)))
Jar,
Jad