SCJP Sun Certified Programmer for Java 5 Study Guide (Exam 310-055)
http://sites.google.com/site/danielopensource/index
martes, 17 de noviembre de 2009
martes, 14 de abril de 2009
JavaME - Trabajando con Bluetooth
Bueno llevo muy poco creando pequeños proyectos en Java Mobile Edition con el framework CLDC 1.1 en el cual las aplicaciones se vuelven mas entandares para celulares más antiguos bueno aqui un Midlet que busca y lista dispositivos remotos por medio de bluetooth.
/*
* 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;
}
}
Suscribirse a:
Entradas (Atom)