/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package pro.midlet;
/**
*
* @author Daniel
*/
import java.io.IOException;
import java.io.InputStream;
import java.util.Calendar;
import java.util.Date;
import java.util.Enumeration;
import java.util.Vector;
import javax.bluetooth.BluetoothStateException;
import javax.bluetooth.DataElement;
import javax.bluetooth.DeviceClass;
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.DiscoveryListener;
import javax.bluetooth.LocalDevice;
import javax.bluetooth.RemoteDevice;
import javax.bluetooth.ServiceRecord;
import javax.bluetooth.UUID;
import javax.microedition.io.file.FileConnection;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Choice;
import javax.microedition.lcdui.ChoiceGroup;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.DateField;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Gauge;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.ItemStateListener;
import javax.microedition.lcdui.List;
import javax.microedition.lcdui.Screen;
import javax.microedition.lcdui.TextBox;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import org.netbeans.microedition.lcdui.SplashScreen;
import org.netbeans.microedition.lcdui.pda.FileBrowser;
import org.netbeans.microedition.lcdui.wma.SMSComposer;
public class ProMIDlet extends MIDlet implements CommandListener, ItemStateListener
{
private Image image1;
private Screen[] screens;
private Command exitCommand, backCommand,okCommand;
private List examplesList;
private Display display;
private boolean started;
private List listDevice;
private List listService;
private LocalDevice dispositivoLocal;
private DiscoveryAgent da;
private SplashScreen splash;
private TextBox textBox;
private FileBrowser fileBrowser;
private SMSComposer smsComposer;
//create command send to form;
private Command fileCommand;
private Command smsCommand;
private Command sendCommand;
//create Alert Object
Alert alertError;
Alert alertSent;
//List of services and Devices
public static Vector dispositivos_encontrados = new Vector();
public static Vector servicios_encontrados = new Vector();
//Instancia del dispositivo remoro seleccionado
public static int dispositivo_seleccionado = -1;//-1 indica ninguno seleccionado
// The example names. Used to populate the list.
private String[] examples =
{
"Discovery Device","Search Service"
};
protected void startApp()
{
if (!started) {
started = true;
display = Display.getDisplay(this);
// Create the common commands
createCommands();
// Create the screens
createScreens();
// Create the list of examples
createList();
// Create Splash Screen
switchDisplayable(null, getSplash(),display);
// Start with the List
// display.setCurrent(examplesList);
}
}
protected void pauseApp()
{
}
protected void destroyApp(boolean unconditional)
{
}
public void commandAction (Command c, Displayable d)
{
if(c == examplesList.SELECT_COMMAND)
{
// New example selected
int index = examplesList.getSelectedIndex();
display.setCurrent(screens[index]);
}
else if(c == exitCommand)
{
notifyDestroyed();
}
else if( c == backCommand)
{
display.setCurrent(examplesList);
}
else if(c == List.SELECT_COMMAND)
{
handleChoiceSelection((Choice)d);
}
if (d == splash)
{
if (c == SplashScreen.DISMISS_COMMAND)
{
display.setCurrent(examplesList);
}
}
else if(c == fileCommand)
{
if(listDevice.getSelectedIndex() > 0)
{
display.setCurrent(getFileBrowser());
}
else
{
display.setCurrent(getAlertError());
}
}
if (c == FileBrowser.SELECT_FILE_COMMAND)
{
readFile();
display.setCurrent(getTextBox());
}
else if (c == exitCommand)
{
notifyDestroyed();
}
else if(c == smsCommand)
{
if(listDevice.getSelectedIndex() > 0)
{
display.setCurrent(getSmsComposer());
}
else
{
display.setCurrent(getAlertError());
}
}
}//close method commandAction
public Image getImage()
{
if(image1 == null)
{
try
{
image1 = Image.createImage("/pro/image/duke.png");
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
return image1;
}//close method getImage
private void createCommands()
{
exitCommand = new Command("Exit", Command.EXIT, 0);
backCommand = new Command("Back", Command.BACK, 1);
fileCommand = new Command("File Browser", Command.OK,1);
smsCommand = new Command("SMS Bluetooth",Command.OK,1);
sendCommand = new Command("", Command.OK, 0);
}//close void createCommands
private void createList()
{
examplesList = new List("Select Example", List.IMPLICIT);
for (int i = 0; i <>
examplesList.append(examples[i], null);
}
examplesList.addCommand(exitCommand);
examplesList.setCommandListener(this);
}//close void creatList
private void createScreens()
{
screens = new Screen[examples.length];/*
screens[0] = createStringsForm();
screens[1] = createTextFieldForm();
screens[2] = createDateFieldForm();
screens[3] = createImageItemForm();
screens[4] = createGaugeForm();
screens[5] = createChoiceGroupForm();*/
screens[0] = createListDevice();
screens[1] = createListService();
/*screens[7] = createAlertForm();
screens[8] = createSoundsForm();*/
}//close void createScreen
public void itemStateChanged(Item item)
{
if (item instanceof TextField) {
System.out.println("Text field content: <" + ((TextField)item).getString() + ">");
} else if (item instanceof DateField) {
DateField df = (DateField)item;
Date date = df.getDate();
if (date != null) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
System.out.println("Date field content set to " + date);
} else {
System.out.println("Date field content set to null");
}
} else if (item instanceof Gauge) {
int value = ((Gauge)item).getValue();
System.out.println("Gauge value set to " + value);
} else if (item instanceof ChoiceGroup) {
handleChoiceSelection((Choice)item);
} else {
System.out.println("Item state changed in " + item);
}
}
private void addCommands(Displayable d)
{
d.addCommand(exitCommand);
d.addCommand(backCommand);
d.setCommandListener(this);
if (d instanceof Form)
{
((Form)d).setItemStateListener(this);
}
}//close void addCommand
private void addCommandsList(Displayable d)
{
d.addCommand(fileCommand);
d.addCommand(smsCommand);
d.addCommand(backCommand);
d.setCommandListener(this);
if (d instanceof Form)
{
((Form)d).setItemStateListener(this);
}
}//close void addCommand
private void handleChoiceSelection(Choice choice)
{
int count = choice.size();
boolean[] states = new boolean[count];
int selCount = choice.getSelectedFlags(states);
if (selCount > 0) {
System.out.println("Selected items:");
for (int i = 0; i <>
if (states[i]) {
System.out.println("\t" + choice.getString(i));
}
}
} else {
System.out.println("No selected items.");
}
int selectedIndex = choice.getSelectedIndex();
System.out.println("Selected index is " + selectedIndex);
}
private Screen createListDevice()
{
listDevice = new List("List Device ", List.IMPLICIT);
try
{
clearList(listDevice);
buscarDispositivos();
listDevice.append("Por favor, espere...", null);
}
catch(Exception e)
{
Form form = new Form("Error");
form.append("Failed to load images, Exception is :"+e.toString());
return form;
}
addCommandsList(listDevice);
return listDevice;
}// close Screen createListExample
private Screen createListService()
{
listService = new List("List Services", List.IMPLICIT);
try
{
dispositivo_seleccionado = listService.getSelectedIndex();
//Nos aseguramos que hay un disposotivo seleccionado
if(dispositivo_seleccionado > -1)
{
clearList(listService);
RemoteDevice dispostivoRemoto = (RemoteDevice)dispositivos_encontrados.elementAt(dispositivo_seleccionado);
buscarServicios(dispostivoRemoto);
}
}
catch(Exception e)
{
Form form = new Form("Error");
form.append("Failed to load images, Exception is :"+e.toString());
return form;
}
addCommandsList(listService);
return listService;
}// close Screen createListExample
//Implementamos el DiscoveryListener
public class Listener implements DiscoveryListener
{
//Implementamos los metodos del interfaz DiscoveryListener
public void deviceDiscovered(RemoteDevice dispositivoRemoto, DeviceClass clase)
{
System.out.println("Se ha encontrado un dispositivo Bluetooth");
dispositivos_encontrados.addElement(dispositivoRemoto);
}
public void inquiryCompleted(int completado)
{
System.out.println("Se ha completado la busqueda de servicios");
if(dispositivos_encontrados.size()==0)
{
Alert alerta = new Alert("Problema","No se ha encontrado dispositivos",null, AlertType.INFO);
alerta.setTimeout(3000);
//dispositivo.escribirMensaje("Presione descubrir dispositivos");
display.setCurrent(alerta,listDevice);
}
else
{
//dispositivo.mostrarDispositivos();
showDevice();
display.setCurrent(listDevice);
}
}
public void servicesDiscovered(int transID, ServiceRecord[] servRecord)
{
System.out.println("Se ha encontrado un servicio remoto");
for(int i=0;i
{
ServiceRecord record = servRecord[i];
servicios_encontrados.addElement(record);
}
}
public void serviceSearchCompleted(int transID, int respCode)
{
System.out.println("Terminada la busqueda de servicios");
if(respCode==SERVICE_SEARCH_COMPLETED ||respCode==SERVICE_SEARCH_NO_RECORDS)
{
//servicio.mostrarServicios();
showService();
display.setCurrent(listService);
}
else
{
Alert alerta = new Alert("Problema","No se ha completado la busqueda",null, AlertType.INFO);
alerta.setTimeout(Alert.FOREVER);
display.setCurrent(alerta,listDevice);
}
}
}//Cierre class Listener
//Este metodo se encarga de buscar dispositivos remotos Bluetoth
public void buscarDispositivos()
{
try
{
dispositivoLocal = LocalDevice.getLocalDevice();
//Ponemos el dispositivo en modo General Discoverable Mode
//General/Unlimited Inquiry Access Code (GIAC)
dispositivoLocal.setDiscoverable(DiscoveryAgent.GIAC);
da = dispositivoLocal.getDiscoveryAgent();
da.startInquiry(DiscoveryAgent.GIAC,new Listener());
}
catch(BluetoothStateException e)
{
e.printStackTrace();
}
}
//Este metodo se encaga de buscar servicios en un dispositivo remoto
public void buscarServicios(RemoteDevice dispositivo_remoto)
{
try
{
//Los servicios posibles vienen identificados por un UUID
int[] servicios = new int[]{0x0001,0x0003,0x0008,0x000C,0x0100,0x000F,
0x1101,0x1000,0x1001,0x1002,0x1115,0x1116,0x1117};
UUID[] uuid = new UUID[]{new UUID(0x0100)};//Servicios L2CAP
da.searchServices(servicios,uuid,dispositivo_remoto,new Listener());
}
catch(BluetoothStateException e)
{
e.printStackTrace();
}
}
public static String uuidToName( UUID u )
{
if ( u.equals( new UUID( 0x0001 ) )) return "SDP";
else if ( u.equals( new UUID( 0x0003 ) )) return "RFCOMM";
else if ( u.equals( new UUID( 0x0008 ) )) return "OBEX";
else if ( u.equals( new UUID( 0x000C ) )) return "HTTP";
else if ( u.equals( new UUID( 0x0100 ) )) return "L2CAP";
else if ( u.equals( new UUID( 0x000F ) )) return "BNEP";
else if ( u.equals( new UUID( 0x1000 ) )) return "ServiceDiscoveryServerServiceClassID";
else if ( u.equals( new UUID( 0x1001 ) )) return "BrowseGroupDescriptorCerviceClassID";
else if ( u.equals( new UUID( 0x1002 ) )) return "PublicBrowseGroup";
else if ( u.equals( new UUID( 0x1101 ) )) return "SerialPort";
else if ( u.equals( new UUID( 0x1102 ) )) return "LANAccessUsingPPP";
else if ( u.equals( new UUID( 0x1103 ) )) return "DialupNetworking";
else if ( u.equals( new UUID( 0x1104 ) )) return "IrMCSync";
else if ( u.equals( new UUID( 0x1105 ) )) return "OBEX ObjectPushProfile";
else if ( u.equals( new UUID( 0x1106 ) )) return "OBEX FileTrasnferProfile";
else if ( u.equals( new UUID( 0x1107 ) )) return "IrMCSyncCommand";
else if ( u.equals( new UUID( 0x1108 ) )) return "Headset";
else if ( u.equals( new UUID( 0x1109 ) )) return "CordlessTelephony";
else if ( u.equals( new UUID( 0x110A ) )) return "AudioSource";
else if ( u.equals( new UUID( 0x1111 ) )) return "Fax";
else if ( u.equals( new UUID( 0x1112 ) )) return "HeadsetAudioGateway";
else if ( u.equals( new UUID( 0x1115 ) )) return "PersonalAreaNetworkingUser";
else if ( u.equals( new UUID( 0x1116 ) )) return "NetworkAccessPoint";
else if ( u.equals( new UUID( 0x1117 ) )) return "GroupNetwork";
else if ( u.equals( new UUID( 0x111E ) )) return "Handsfree";
else if ( u.equals( new UUID( 0x111F ) )) return "HandsfreeAudioGateway";
else if ( u.equals( new UUID( 0x1201 ) )) return "GenericNetworking";
else if ( u.equals( new UUID( 0x1202 ) )) return "GenericFileTransfer";
else if ( u.equals( new UUID( 0x1203 ) )) return "GenericAudio";
else if ( u.equals( new UUID( 0x1204 ) )) return "GenericTelephony";
else return u.toString();
}
public void clearList(List list)
{
clearArrays();
list.deleteAll();
}
public void clearArrays()
{
dispositivos_encontrados.removeAllElements();
servicios_encontrados.removeAllElements();
}
public void showDevice()
{
if(dispositivos_encontrados.size() > 0)
{
for(int i=0; i
{
try
{
// clearList(listDevice);
Image imageCell = Image.createImage("/pro/image/cel.png");
RemoteDevice dispositivoRemoto = (RemoteDevice) dispositivos_encontrados.elementAt(i);
listDevice.append(dispositivoRemoto.getFriendlyName(false), imageCell);
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
}
}
public void showService()
{
if(servicios_encontrados.size() > 0)
{
for(int j=0;j
{
try
{
//clearList(listService);
Image imageCell = Image.createImage("/pro/image/cel.png");
ServiceRecord rec = (ServiceRecord)servicios_encontrados.elementAt(j);
DataElement e = rec.getAttributeValue(0x0001);
Enumeration enum = (Enumeration)e.getValue();
DataElement e2 = (DataElement)enum.nextElement();
Object v = e2.getValue();
String name = "#"+j+" "+uuidToName((UUID) v);
listService.append(name, imageCell);
}
catch(IOException e)
{
e.printStackTrace();
}
}
}
}
public SplashScreen getSplash()
{
if (splash == null) {
// write pre-init user code here
splash = new SplashScreen(display.getDisplay(this));
splash.setTitle("Orion Software Integrators INC.");
splash.setCommandListener(this);
splash.setImage(getImage());
splash.setText("www.orioninc.com");
splash.setTimeout(3000);
// write post-init user code here
}
return splash;
}
public void switchDisplayable(Alert alert, Displayable nextDisplayable,Display display)
{
if (alert == null)
{
display.setCurrent(nextDisplayable);
}
else
{
display.setCurrent(alert, nextDisplayable);
}
}
private void readFile()
{
try {
FileConnection textFile = fileBrowser.getSelectedFile();
getTextBox().setString("");
InputStream fis = textFile.openInputStream();
byte[] b = new byte[1024];
int length = fis.read(b, 0, 1024);
fis.close();
if (length > 0) {
textBox.setString(new String(b, 0, length));
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
public FileBrowser getFileBrowser()
{
if (fileBrowser == null) {
// write pre-init user code here
fileBrowser = new FileBrowser(display.getDisplay(this));
fileBrowser.setTitle("fileBrowser");
fileBrowser.setCommandListener(this);
fileBrowser.addCommand(FileBrowser.SELECT_FILE_COMMAND);
fileBrowser.addCommand(backCommand);
// write post-init user code here
}
return fileBrowser;
}
public TextBox getTextBox()
{
if (textBox == null)
{
// write pre-init user code here
textBox = new TextBox("textBox", null, 100, TextField.ANY);
textBox.addCommand(backCommand);
textBox.setCommandListener(this);
// write post-init user code here
}
return textBox;
}
public SMSComposer getSmsComposer()
{
if (smsComposer == null)
{
smsComposer = new SMSComposer(display);
smsComposer.setTitle("SMS Orion BLuetooth ");
smsComposer.addCommand(SMSComposer.SEND_COMMAND);
smsComposer.addCommand(backCommand);
smsComposer.addCommand(sendCommand);
smsComposer.setCommandListener(this);
smsComposer.setBGColor(-3355555);
smsComposer.setFGColor(-16777216);
smsComposer.setSendAutomatically(false);
smsComposer.setPhoneNumberLabel("Freindly Name:");
smsComposer.setPhoneNumber("");
smsComposer.setPhoneNumber(getFreindlyName(listDevice.getSelectedIndex()));
smsComposer.setMessageLabel("Message:");
}
return smsComposer;
}
public String getFreindlyName(int selection)
{
String name = null;
dispositivo_seleccionado = selection;
if(dispositivo_seleccionado > -1)
{
try
{
RemoteDevice dispostivoRemoto = (RemoteDevice) dispositivos_encontrados.elementAt(dispositivo_seleccionado);
name = dispostivoRemoto.getFriendlyName(true).toString();
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
return name;
}
public Alert getAlertError()
{
if (alertError == null)
{
alertError = new Alert("Error of Selection", "Selecting a mobile device", null, null);
alertError.setTimeout(Alert.FOREVER);
}
return alertError;
}
public Alert getAlertSent()
{
if (alertSent == null)
{
alertSent = new Alert("alert1", "Message Sent", null, null);
alertSent.setTimeout(Alert.FOREVER);
}
return alertSent;
}
}
muy bueno
ResponderEliminar