Java - Bluetooth API Bluecove Issue

Manitoba picture Manitoba · Oct 24, 2012 · Viewed 6.9k times · Source

I'm having an issue using the Bluecove API in Java. I plan to create a basic BT listener in order to receive some data from a homemade device (Arduino powered). I've the following code which is quite easy to understand:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

import javax.bluetooth.*;
import javax.microedition.io.*;

public class Bluetooth
{
    private void startServer() throws IOException
    {
    //Create a UUID for SPP
    UUID uuid = new UUID("1101", true);
    //Create the servicve url
    String connectionString = "btspp://localhost:" + uuid +";name=Magic Merlin Server";

    //open server url
    StreamConnectionNotifier streamConnNotifier = (StreamConnectionNotifier)Connector.open(connectionString);

    //Wait for client connection
    System.out.println("\nServer Started. Waiting for clients to connect...");
    StreamConnection connection = streamConnNotifier.acceptAndOpen();

    RemoteDevice dev = RemoteDevice.getRemoteDevice(connection);
    System.out.println("Remote device address: "+dev.getBluetoothAddress());
    System.out.println("Remote device name: "+dev.getFriendlyName(true));

    //read string from spp client
    InputStream inStream=connection.openInputStream();
    BufferedReader bReader=new BufferedReader(new InputStreamReader(inStream));
    String lineRead=bReader.readLine();
    System.out.println(lineRead);

    //send response to spp client
    OutputStream outStream = connection.openOutputStream();
    PrintWriter pWriter=new PrintWriter(new OutputStreamWriter(outStream));
    pWriter.write("Response String from SPP Server\r\n");
    pWriter.flush();
    pWriter.close();

    streamConnNotifier.close();
    }

    public static void main(String[] args) throws IOException
    {
    LocalDevice localDevice = LocalDevice.getLocalDevice();
    System.out.println("Address: "+localDevice.getBluetoothAddress());
    System.out.println("Name: "+localDevice.getFriendlyName());

    Bluetooth sampleSPPServer = new Bluetooth();
    sampleSPPServer.startServer();
    }
}

WHen I try to execute my code, I got this weird error:

Exception in thread "main" javax.bluetooth.BluetoothStateException: BlueCove com.intel.bluetooth.BluetoothStackBlueZ not available
at com.intel.bluetooth.BlueCoveImpl.loadStackClass(BlueCoveImpl.java:342)
at com.intel.bluetooth.BlueCoveImpl.detectStack(BlueCoveImpl.java:427)
at com.intel.bluetooth.BlueCoveImpl.access$500(BlueCoveImpl.java:65)
at com.intel.bluetooth.BlueCoveImpl$1.run(BlueCoveImpl.java:1020)
at java.security.AccessController.doPrivileged(Native Method)
at com.intel.bluetooth.BlueCoveImpl.detectStackPrivileged(BlueCoveImpl.java:1018)
at com.intel.bluetooth.BlueCoveImpl.getBluetoothStack(BlueCoveImpl.java:1011)
at javax.bluetooth.LocalDevice.getLocalDeviceInstance(LocalDevice.java:75)
at javax.bluetooth.LocalDevice.getLocalDevice(LocalDevice.java:95)
at Bluetooth.main(Bluetooth.java:50)

The 50th line is LocalDevice localDevice = LocalDevice.getLocalDevice();.

I have a BT dongle on my computer which is enabled, so I'm really disapointed with that. If you have any idea on how to solve this, it'd be kind!

Thanks anyway for reading this subject. Regards.

Answer

icyrock.com picture icyrock.com · Oct 27, 2012

If this is on Linux, two things that you can check:

  • Do you have net.sf.bluecove:bluecove-gpl:2.1.0 in your classpath? See this for more info.
  • Do you have libbluetooth-dev package installed? This may be Xubuntu specific, though. This package contains BlueZ, type apt-cache show libbluetooth-dev to see the description. Other Linux distributions probably have an equivalent library

Hope this helps.