martes, 17 de noviembre de 2009

Certificacion Java SCJP 1.5

SCJP Sun Certified Programmer for Java 5 Study Guide (Exam 310-055)


http://sites.google.com/site/danielopensource/index

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;
    }
}