2013-06-02 12 views
8

ho provato il seguente codice per la scoperta di un dispositivo bluetoothErrore a Discovery dispositivo Bluetooth

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.Vector; 

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; 

/** 
* 
* 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(); 

    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(); 
     int index=Integer.parseInt(chosenIndex.trim()); 

     //check for obex service 
     RemoteDevice remoteDevice=(RemoteDevice)vecDevices.elementAt(index-1); 
     UUID[] uuidSet = new UUID[1]; 
     uuidSet[0]=new UUID("1105",true); 

     System.out.println("\nSearching for service..."); 
     agent.searchServices(null,uuidSet,remoteDevice,bluetoothServiceDiscovery); 

     try { 
      synchronized(lock){ 
       lock.wait(); 
      } 
     } 
     catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

     if(connectionURL==null){ 
      System.out.println("Device does not support Object Push."); 
     } 
     else{ 
      System.out.println("Device supports Object Push."); 
     } 
    } 


    /** 
    * 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); 
     } 
     synchronized(lock){ 
      lock.notify(); 
     } 
    } 


    /** 
    * Called when the service search is over. 
    */ 
    public void serviceSearchCompleted(int transID, int respCode) { 
     synchronized(lock){ 
      lock.notify(); 
     } 
    } 


    /** 
    * Called when the device search is over. 
    */ 
    public void inquiryCompleted(int discType) { 
     synchronized(lock){ 
      lock.notify(); 
     } 

    }//end method 


}//end class 

ma ha ottenuto il seguente errore:

Native Library intelbth_x64 not available 
Native Library bluecove_x64 not available 
Exception in thread "main" javax.bluetooth.BluetoothStateException: BlueCove libraries not available 
    at com.intel.bluetooth.BlueCoveImpl.createDetectorOnWindows(BlueCoveImpl.java:896) 
    at com.intel.bluetooth.BlueCoveImpl.detectStack(BlueCoveImpl.java:439) 
    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 BluetoothServiceDiscovery.main(BluetoothServiceDiscovery.java:42) 

durante la codifica in Eclipse. Sto usando bluecove 2.1.0 e una versione a 64 bit di Windows 8.

Qualcuno può suggerirmi una correzione?

+0

quale versione di win 8 stai usando? 32/64 bit? – ridoy

+0

Sto usando Windows 8 a 64 bit e anche la mia versione di Eclipse era a 64 bit. – Ranveer

+0

quindi utilizzare quella versione di 64 bit della libreria bluecove. – ridoy

risposta

12
+1

Per la stessa versione 2.1.1 di bluecove, alcune versioni includono librerie native mentre altre non lo fanno. Avevo ricevuto un progetto con un file .jar fornito senza librerie native, quindi il download e la copia del nuovo file .jar risolto il mio problema. –