Pertama lakukan instalasi Bluecove di Eclipse atau Netbeans. Lalu buat sorce code berikut ini:
1. Aplikasi di PC (Komputer) Anda:
import java.io.*;
import javax.bluetooth.*;
import javax.microedition.io.*;
public class EchoServer {
public final UUID uuid = new UUID( //the uid of the service, it has to be unique,
"27012f0c68af4fbf8dbe6bbaf7aa432a", false); //it can be generated randomly
public final String name = "Echo Server"; //the name of the service
public final String url = "btspp://localhost:" + uuid //the service url
+ ";name=" + name
+ ";authenticate=false;encrypt=false;";
LocalDevice local = null;
StreamConnectionNotifier server = null;
StreamConnection conn = null;
public EchoServer() {
try {
System.out.println("Setting device to be discoverable...");
local = LocalDevice.getLocalDevice();
local.setDiscoverable(DiscoveryAgent.GIAC);
System.out.println("Start advertising service...");
server = (StreamConnectionNotifier)Connector.open(url);
System.out.println("Waiting for incoming connection...");
conn = server.acceptAndOpen();
System.out.println("Client Connected...");
DataInputStream din = new DataInputStream(conn.openInputStream());
while(true){
String cmd = "";
char c;
while (((c = din.readChar()) > 0) && (c!='\n') ){
cmd = cmd + c;
}
System.out.println("Received " + cmd);
}
} catch (Exception e) {System.out.println("Exception Occured: " + e.toString());}
}
public static void main (String args[]){
EchoServer echoserver = new EchoServer();
}
}
2. Aplikasi di HP Anda:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import javax.bluetooth.*;
import java.io.*;
public class EchoClient extends MIDlet
implements CommandListener,DiscoveryListener {
List main_list,dev_list;
Command exit,ok;
TextBox cmd;
Display display;
java.util.Vector devices,services;
LocalDevice local;
DiscoveryAgent agent;
DataOutputStream dout;
int currentDevice = 0; //used as an indicator to the device queried for
//the echo server
public void startApp() {
main_list = new List("Echo Server",Choice.IMPLICIT); //the main menu
dev_list = new List("Select Device",Choice.IMPLICIT); //the list of devices
cmd = new TextBox("Text to echo","",120,TextField.ANY);
exit = new Command("Exit",Command.EXIT,1);
ok = new Command("Send",Command.OK,1);
display = Display.getDisplay(this);
main_list.addCommand(exit);
main_list.setCommandListener(this);
dev_list.addCommand(exit);
dev_list.setCommandListener(this);
cmd.addCommand(ok);
cmd.setCommandListener(this);
main_list.append("Find Echo Server",null);
display.setCurrent(main_list);
}
public void commandAction(Command com, Displayable dis) {
if (com == exit){ //exit triggered from the main form
destroyApp(false);
notifyDestroyed();
}
if (com == List.SELECT_COMMAND){
if (dis == main_list){ //select triggered from the main from
if (main_list.getSelectedIndex() >= 0){ //find devices
FindDevices();
do_alert("Searching for devices...", Alert.FOREVER);
}
}
if (dis == dev_list){ //select triggered from the device list
StreamConnection conn = null;
ServiceRecord service = (ServiceRecord)
services.elementAt(dev_list.getSelectedIndex());
String url = service.getConnectionURL(
ServiceRecord.NOAUTHENTICATE_NOENCRYPT,
false);
try {
conn = (StreamConnection) Connector.open(url); //establish the connection
dout = new DataOutputStream(conn.openOutputStream());//Get the output stream
display.setCurrent(cmd); //Show the textbox
} catch (Exception e) {this.do_alert("Error Connecting" , 4000);}
}
}
if(com == ok){ //the user is sending a command
try{
dout.writeChars(cmd.getString() + "\n");
dout.flush();
cmd.setString("");
} catch (Exception e) {this.do_alert("Error sending data" , 4000);}
}
}
public void FindDevices(){
try{
devices = new java.util.Vector();
LocalDevice local = LocalDevice.getLocalDevice();
DiscoveryAgent agent = local.getDiscoveryAgent();
agent.startInquiry(DiscoveryAgent.GIAC,this);
}catch(Exception e){this.do_alert("Erron in initiating search" , 4000);}
}
public void FindServices(RemoteDevice device){
try{
UUID[] uuids = new UUID[1];
uuids[0] = new UUID("27012f0c68af4fbf8dbe6bbaf7aa432a",false); //The UUID of the ech service
local = LocalDevice.getLocalDevice();
agent = local.getDiscoveryAgent();
agent.searchServices(null,uuids,device,this);
}catch(Exception e){this.do_alert("Erron in initiating search" , 4000);}
}
public void deviceDiscovered(RemoteDevice remoteDevice,DeviceClass deviceClass) {
devices.addElement(remoteDevice);
}
public void servicesDiscovered(int transID,ServiceRecord[] serviceRecord) {
for (int x = 0; x < serviceRecord.length; x++ )
services.addElement(serviceRecord[x]);
try{
dev_list.append(((RemoteDevice)devices.elementAt(currentDevice)).
getFriendlyName(false),null);
}catch(Exception e){this.do_alert("Erron in initiating search" , 4000);}
}
public void inquiryCompleted(int param){
switch (param) {
case DiscoveryListener.INQUIRY_COMPLETED: //Inquiry completed normally
if (devices.size() > 0){ //Atleast one device has been found
services = new java.util.Vector();
this.FindServices((RemoteDevice)
devices.elementAt(0)); //Check if the first device offers the service
}else
do_alert("No device found in range",4000);
break;
case DiscoveryListener.INQUIRY_ERROR: // Error during inquiry
this.do_alert("Inqury error" , 4000);
break;
case DiscoveryListener.INQUIRY_TERMINATED: // Inquiry terminated by agent.cancelInquiry()
this.do_alert("Inqury Canceled" , 4000);
break;
}
}
public void serviceSearchCompleted(int transID, int respCode) {
switch(respCode) {
case DiscoveryListener.SERVICE_SEARCH_COMPLETED:
if(currentDevice == devices.size() -1){ //all devices have been searched
if(services.size() > 0){
display.setCurrent(dev_list);
}else
do_alert("The service was not found",4000);
}else{ //search next device
currentDevice++;
this.FindServices((RemoteDevice)devices.elementAt(currentDevice));
}
break;
case DiscoveryListener.SERVICE_SEARCH_DEVICE_NOT_REACHABLE:
this.do_alert("Device not Reachable" , 4000);
break;
case DiscoveryListener.SERVICE_SEARCH_ERROR:
this.do_alert("Service serch error" , 4000);
break;
case DiscoveryListener.SERVICE_SEARCH_NO_RECORDS:
this.do_alert("No records returned" , 4000);
break;
case DiscoveryListener.SERVICE_SEARCH_TERMINATED:
this.do_alert("Inqury Cancled" , 4000);
break;
}
}
public void do_alert(String msg,int time_out){
if (display.getCurrent() instanceof Alert ){
((Alert)display.getCurrent()).setString(msg);
((Alert)display.getCurrent()).setTimeout(time_out);
}else{
Alert alert = new Alert("Bluetooth");
alert.setString(msg);
alert.setTimeout(time_out);
display.setCurrent(alert);
}
}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {}
}
Silakan anda juga membaca: http://www.miniware.net/articles/viewarticle.php?id=22
-= Sapto Sutardi =-
Mataram, 4 November 2009