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");
}
}
|