Here is the source code for the sending files to mobiles from computer/pc using java application or j2me code through bluetooth as transmission medium.Many of us means amateur java and j2me programmer find it difficult to use bluetooth in java application as java development kit has no bluetooth library to use. As I have mentioned in my previous posts Bluecove is a J2SR-82 project meant for acessing bluetooth stack from java (java standard edition) .
So, for sending files from pc to mobile using java application through bluetooth. You must download Bluecove() and place it in both the runtime library extension folder of jre and jdk i.e "C:\Programs Files \Java\jre1.6.0\lib\ext" and "C:\Programs Files \Java\jdk1.6.0\jre\lib\ext" or the place where you have installed java under that find these two paths "jre1.6.0\lib\ext" and "jdk1.6.0\jre\lib\ext".
Before starting you must have bluetooth stack installed in your computer as mentioned in my previous post "Bluetooth Mobile Webcam - A Java & J2me based Project"
Change one thing in the code :
"File file = new File("D:/cmd.jpg");
InputStream is = new FileInputStream(file);
byte filebytes[] = new byte[is.available()];
is.read(filebytes);
is.close();"
Find this part in the code "File file = new File("D:/cmd.jpg")" and change the file path to your desired file path that you want to send to mobile.
eg: C:\test.txt
Now, compile this code and run it ....
Source Code Started:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Vector;
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.Connection;
import javax.microedition.io.Connector;
import javax.obex.ClientSession;
import javax.obex.HeaderSet;
import javax.obex.Operation;
/**
*
* Class that discovers all bluetooth devices in the neighbourhood,
*
* Connects to the chosen device and checks for the presence of OBEX push service in it.
* and displays their name and bluetooth address.
*
*
*/
public class BluetoothServiceDiscovery implements DiscoveryListener{
//object used for waiting
private static Object lock=new Object();
//vector containing the devices discovered
private static Vector vecDevices=new Vector();
//vector containing the services discovered
private static Vector vecServices=new Vector();
private static String connectionURL=null;
/**
* Entry point.
*/
public static void main(String[] args) throws IOException
{
BluetoothServiceDiscovery bluetoothServiceDiscovery=new BluetoothServiceDiscovery();
//display local device address and name
LocalDevice localDevice = LocalDevice.getLocalDevice();
System.out.println("Address: "+localDevice.getBluetoothAddress());
System.out.println("Name: "+localDevice.getFriendlyName());
//find devices
DiscoveryAgent agent = localDevice.getDiscoveryAgent();
System.out.println("Starting device inquiry...");
agent.startInquiry(DiscoveryAgent.GIAC, bluetoothServiceDiscovery);
try {
synchronized(lock){
lock.wait();
}
}
catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Device Inquiry Completed. ");
//print all devices in vecDevices
int deviceCount=vecDevices.size();
if(deviceCount <= 0){
System.out.println("No Devices Found .");
}
else{
//print bluetooth device addresses and names in the format [ No. address (name) ]
System.out.println("Bluetooth Devices: ");
for (int i = 0; i < devicecount; i++)
RemoteDevice remoteDevice=(RemoteDevice)vecDevices.elementAt(i);
System.out.println((i+1)+". "+remoteDevice.getBluetoothAddress());//+" ("+remoteDevice.getFriendlyName(true)+")");
}
}
// System.out.print("Choose the device to search for Obex Push service : ");
// BufferedReader bReader=new BufferedReader(new InputStreamReader(System.in));
// String chosenIndex=bReader.readLine();
// System.out.println(chosenIndex);
// int index=Integer.parseInt(chosenIndex);
// System.out.println(chosenIndex);
for(int j = 0; j < deviceCount; j++)
{
//check for obex service
RemoteDevice remoteDevice=(RemoteDevice)vecDevices.elementAt(j);
UUID[] uuidSet = {new UUID("1105", true)};
int[] attrSet = {0x0100, 0x0003, 0x0004};
System.out.println("\nSearching for service...");
int transID = agent.searchServices(attrSet,uuidSet,remoteDevice,bluetoothServiceDiscovery);
System.out.println("Service Search in Progress ("+transID+")");
try {
synchronized(lock)
{
lock.wait();
}
}
catch (InterruptedException e)
{
e.printStackTrace();
}
//System.out.println("Service Discovery Completed. ");
System.out.println("Opening a connection with the server.... ");
// connection creation & sending file
try
{
Connection connection = Connector.open(connectionURL);
System.out.println("Connection obtained");
ClientSession cs = (ClientSession)connection;
HeaderSet hs = cs.createHeaderSet();
cs.connect(hs);
System.out.println("OBEX session created");
//System.out.println("Response code of the server after connect..." +hs.getResponseCode());
File file = new File("D:/cmd.jpg");
InputStream is = new FileInputStream(file);
byte filebytes[] = new byte[is.available()];
is.read(filebytes);
is.close();
hs = cs.createHeaderSet();
hs.setHeader(HeaderSet.NAME, file.getName());
hs.setHeader(HeaderSet.TYPE, "image/jpeg");
hs.setHeader(HeaderSet.LENGTH, new Long(filebytes.length));
Operation putOperation = cs.put(hs);
System.out.println("Pushing file: " + file.getName());
System.out.println("Total file size: " + filebytes.length + " bytes");
OutputStream outputStream = putOperation.openOutputStream();
outputStream.write(filebytes);
System.out.println("File push complete");
outputStream.close();
putOperation.close();
cs.disconnect(null);
connection.close();
}
catch(Exception e)
{
System.out.println("connection:"+e);
}
}
}
/**
* Called when a bluetooth device is discovered.
* Used for device search.
*/
public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {
//add the device to the vector
if(!vecDevices.contains(btDevice))
{
vecDevices.addElement(btDevice);
}
}
/**
* Called when a bluetooth service is discovered.
* Used for service search.
*/
public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {
/*if(servRecord!=null && servRecord.length>0)
{
connectionURL=servRecord[0].getConnectionURL(0,false);
System.out.println(connectionURL+"--"+servRecord);
}*/
for(int i = 0; i < servRecord.length; i++)
{
//vecServices=servRecord[i].getConnectionURL(0,false);
DataElement serviceNameElement = servRecord[i].getAttributeValue(0x0100);
String _serviceName = (String)serviceNameElement.getValue();
String serviceName = _serviceName.trim();
System.out.println(_serviceName);
if(serviceName.equals("OBEX Object Push"))
{
System.out.println("[client:] A matching service has been found\n");
try
{
connectionURL = servRecord[i].getConnectionURL(0,false);
System.out.println(connectionURL+"\n");
} catch (Exception e)
{
System.out.println("[client:] oops");
}
}
}
}
/**
* Called when the service search is over.
*/
public void serviceSearchCompleted(int transID, int respCode) {
/*synchronized(lock)
{
lock.notify();
}*/
String searchStatus = null;
if (respCode == DiscoveryListener.SERVICE_SEARCH_DEVICE_NOT_REACHABLE) {
searchStatus = "SERVICE_SEARCH_DEVICE_NOT_REACHABLE\n";
}
else if (respCode == DiscoveryListener.SERVICE_SEARCH_NO_RECORDS) {
searchStatus = "SERVICE_SEARCH_NO_RECORDS\n";
}
else if (respCode == DiscoveryListener.SERVICE_SEARCH_COMPLETED) {
searchStatus = "SERVICE_SEARCH_COMPLETED\n";
}
else if (respCode == DiscoveryListener.SERVICE_SEARCH_TERMINATED) {
searchStatus = "SERVICE_SEARCH_TERMINATED\n";
}
else if (respCode == DiscoveryListener.SERVICE_SEARCH_ERROR) {
searchStatus = "SERVICE_SEARCH_ERROR\n";
}
System.out.println("[client:] " + searchStatus);
synchronized(lock)
{
lock.notify();
}
}
/**
* Called when the device search is over.
*/
public void inquiryCompleted(int discType) {
switch (discType)
{
case DiscoveryListener.INQUIRY_COMPLETED :
System.out.println("INQUIRY_COMPLETED");
break;
case DiscoveryListener.INQUIRY_TERMINATED :
System.out.println("INQUIRY_TERMINATED");
break;
case DiscoveryListener.INQUIRY_ERROR :
System.out.println("INQUIRY_ERROR");
break;
default :
System.out.println("Unknown Response Code");
break;
}
synchronized(lock)
{
lock.notify();
}
}//end method
}//end class
(Read more inside ..)