FileDocCategorySizeDatePackage
BluetoothServicesSearch.javaAPI DocExample4365Thu Feb 16 12:42:04 GMT 2006None

BluetoothServicesSearch.java

import java.io.IOException;
import javax.bluetooth.*;

public class BluetoothServicesSearch implements DiscoveryListener {
  
  private DiscoveryAgent agent;
  private final static UUID L2CAP = new UUID(0x0100);
  
  public static void main(String[] args) throws Exception { 
    BluetoothServicesSearch search = new BluetoothServicesSearch();
    search.agent = LocalDevice.getLocalDevice().getDiscoveryAgent();
    search.agent.startInquiry(DiscoveryAgent.GIAC, search);
  }

  public void deviceDiscovered(RemoteDevice device, DeviceClass type) {
    try {
      System.out.println("Found " + device.getFriendlyName(false)
          + " at " + device.getBluetoothAddress());
    } 
    catch (IOException ex) {
      System.out.println("Found unnamed device " 
          + " at " + device.getBluetoothAddress());
    }
    searchServices(device);
  }
  
  public final static int SERVICE_RECORD_HANDLE             = 0X0000;
  public final static int SERVICE_CLASSID_LIST              = 0X0001;
  public final static int SERVICE_RECORD_STATE              = 0X0002;
  public final static int SERVICE_ID                        = 0X0003;
  public final static int PROTOCOL_DESCRIPTOR_LIST          = 0X0004;
  public final static int BROWSE_GROUP_LIST                 = 0X0005;
  public final static int LANGUAGE_BASED_ATTRIBUTE_ID_LIST  = 0X0006;
  public final static int SERVICE_INFO_TIME_TO_LIVE         = 0X0007;
  public final static int SERVICE_AVAILABILITY              = 0X0008;
  public final static int BLUETOOTH_PROFILE_DESCRIPTOR_LIST = 0X0009;
  public final static int DOCUMENTATION_URL                 = 0X000A;
  public final static int CLIENT_EXECUTABLE_URL             = 0X000B;
  public final static int ICON_URL                          = 0X000C;
  public final static int VERSION_NUMBER_LIST               = 0X0200;
  public final static int SERVICE_DATABASE_STATE            = 0X0201;
  
  private void searchServices(RemoteDevice device) {
    
    UUID[] searchList = {L2CAP};
    int[] attributes = {SERVICE_RECORD_HANDLE, SERVICE_CLASSID_LIST, 
                        SERVICE_RECORD_STATE, SERVICE_ID, 
                        PROTOCOL_DESCRIPTOR_LIST, BROWSE_GROUP_LIST, 
                        LANGUAGE_BASED_ATTRIBUTE_ID_LIST,
                        SERVICE_INFO_TIME_TO_LIVE, SERVICE_AVAILABILITY, 
                        BLUETOOTH_PROFILE_DESCRIPTOR_LIST, DOCUMENTATION_URL, 
                        CLIENT_EXECUTABLE_URL, ICON_URL, VERSION_NUMBER_LIST, 
                        SERVICE_DATABASE_STATE};
    try {
    System.out.println("Searching " + device.getBluetoothAddress() 
       + " for services");
      int trans = this.agent.searchServices(attributes, searchList, device, this);
      System.out.println("Service Search " + trans + " started");
    }
    catch (BluetoothStateException ex) {
      System.out.println( "BluetoothStateException: " + ex.getMessage() );
    }    
    
  }
  
  public void servicesDiscovered(int transactionID, ServiceRecord[] record) {
      for (int i = 0; i < record.length; i++) {
        System.out.println("Found service " + record[i].getConnectionURL(
         ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false)); 
      }   
  }

  public void serviceSearchCompleted(int transactionID, int responseCode) {
    
    switch (responseCode) {
      case DiscoveryListener.SERVICE_SEARCH_DEVICE_NOT_REACHABLE:
        System.out.println("Could not find device on search " + transactionID);
        break;
      case DiscoveryListener.SERVICE_SEARCH_ERROR:
        System.out.println("Error searching device on search " + transactionID);
        break;
      case DiscoveryListener.SERVICE_SEARCH_NO_RECORDS:
        System.out.println("No service records on device on search " 
         + transactionID);
        break;
      case DiscoveryListener.SERVICE_SEARCH_TERMINATED:
        System.out.println("User cancelled search " + transactionID);
        break;
      case DiscoveryListener.SERVICE_SEARCH_COMPLETED:
        System.out.println("Service search " + transactionID + " complete");
        break;
      default:
        System.out.println("Unexpected response code " + responseCode 
         + " from search " + transactionID);        
    }
  }

  public void inquiryCompleted(int transactionID) {
    System.out.println("Device search " + transactionID + " complete");
  }
}