#ff0000 21  2005 . - #000655  Bluetooth  J2ME . (JSR-82) -  3. Device  Service Discovery API
 
#def          Java Bluetooth API.   Connector.open()    .    StreamConnectionNotifier.acceptAndOpen()  L2CAPConnetionNotifier.acceptAndOpen(),     Service Discovery Database (SDDB).               .
 Device  Service Discovery API
    Bluetooth    , ,    Java APIs for Bluetooth. API        DiscoverAgent   DiscoveryListener, RemoteDevice, ServiceRecord. 
MIDlet
JSR-82    DiscoveryAgent,   ,      .     DiscoveryListener,       .   DiscoveryAgent ,    LocalDevice.getDiscoveryAgent(). 
       DiscoveryAgent.startInquiry(),      "".       , DiscoveryAgent    ,  callback  deviceDiscovered()  servicesDiscovered().     ,    ,     retrieveDevices()  searchServices()  DiscoveryAgent,           .        . 
DiscoveryAgent
DiscoveryAgent       : 
boolean cancelInquiry(DiscoveryListener listener) -     . 
boolean cancelServiceSearch(int transID) -    ,   ID. 
RemoteDevice[] retrieveDevices(int option) -       Bluetooth ,         ,   . 
int searchServices(int[] attrSet, UUID[] uuidSet, RemoteDevice btDev, DiscoveryListener discListener) -      Bluetooth ,    UUID,   uuidSet. 
java.lang.String selectService(UUID uuid, int security, boolean master) -   ,  uuid  ServiceClassIDList  . 
boolean startInquiry(int accessCode, DiscoveryListener listener) -     . 
DiscoveryListener
DiscoveryListener  callback ,  ,     : 
void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) - ,       . 
void inquiryCompleted(int discType) - ,   . 
void servicesDiscovered(int transID, ServiceRecord[] servRecord) - ,        . 
void serviceSearchCompleted(int transID, int respCode) - ,    ,    . 
ServiceRecord
ServiceRecord     RemoteDevice.       ,  URL, host     Service Discovery Database: 
int[] getAttributeIDs() -  ID  ,         getAttributeValue(). 
DataElement getAttributeValue(int attrID) -   ID  ,  . 
java.lang.String getConnectionURL(int requiredSecurity, boolean mustBeMaster) -  ,    ,        ,  ServiceRecord. 
RemoteDevice getHostDevice() -   Bluetooth ,       . 
boolean populateRecord(int[] attrIDs) -  ,    Bluetooth .     ID  ,   Bluetooth . 
boolean setAttributeValue(int attrID, DataElement attrValue) -  ServiceRecord,   - (attrID, attrValue). 
void setDeviceServiceClasses(int classes) -   ,      ,      DeviceClass  ,        SDDB. 
     Discovery API. 
Listing 8.   Discovery API. public class MyMIDlet implements DiscoveryListener { 
 
    LocalDevice localDevice = LocalDevice.getLocalDevice(); 
    DiscoveryAgent discoveryAgent = localDevice.getDiscoveryAgent(); 
    RemoteDevice[] devList; 
    Vector deviceList = new Vector(); //    
    ServiceRecord serviceRecord; 
    : 
    : 

    //**           */ 
    private void discover() { 
        //,    . 
        devList = discoveryAgent.retrieveDevices(DiscoveryAgent.CACHED); 
        if (devList != null) { 
            serviceRecord = searchServices(devList); 
            if (serviceRecord == null) { 
                //    . 
                devList = discoveryAgent.retrieveDevices(DiscoveryAgent.PREKNOWN); 
                if (devList != null) { 
                    serviceRecord = searchServices(devList); 
                } 
            } 
        } 
        if (serviceRecord == null) { 
            serviceAgent.startInquiry(DiscoveryAgent.GIAC, this); 
        } 
    } 

    /*       */ 
    private boolean searchServices(RemoteDevice[] devList) { 
 
        UUID[] searchList = new UUID[2]; 
 
        //  UUID  L2CAP,    , 
        //      L2CAP. 
        //     Bluetooth Assigned Numbers document. 
        searchList[0] = new UUID(0x0100); 
 
        //  UUID    
        searchList[1] = new UUID(MY_SERVICE_UUID, false); 
 
        //   ,    .
        for (int i = 0; i < devList.length; i++) { 
            try { 
                int trans; 
                trans = 
                   discoveryAgent.search Services(null, searchList, devList[i], this); 
            } catch (BluetoothStateException e) { 
            } 
        } 
    } 
 
    //*********************************/ 
    //** DiscoveryListener Callbacks **/ 
    //*********************************/ 

  //** ,    */ 
    public void servicesDiscovered(int transID, ServiceRecord[] servRecord) { 
        if (serviceRecord != null) return; 
        //  .   .
        serviceRecord = servRecord[0]; 
    } 
 
    //** ,   */ 
    public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) { 
        deviceList.addElement(btDevice); //  
    } 
 
    //**     */ 
    public void serviceSearchCompleted(int transID, int respCode) { 
        : 
    } 
 
    //**     */ 
    public void inquiryCompleted(int discType) { 
        : 
    } 
} 

Java API for Bluetooth   .     ,       . 
       ,   URL,   .       RFCOMM  ,     . 
String url = "btspp://localhost:3B9FA89520078C303355AAA694238F07; authenticate=true;encrypt=true"; 
       ,     RemoteDevice: 
remoteDevice.authenticate() -    (RemoteDevice)  . 
remoteDevice.encrypt(con, true) - /     . 
remoteDevice.authorize(con) - ,          ,  Connection. 
 ,    ,     RemoteDevice: 
boolean isAuthenticated() - ,     . 
boolean isAuthorized(javax.microedition.io.Connection conn) - ,        BBC       ,    . 
boolean isEncrypted() - ,         RemoteDevice. 
boolean isTrustedDevice() - ,   BCC    . 
           URL    Connector.open().  ,      ,     ServiceRecord.getConnectionURL(),     URL  : 
java.lang.String getConnectionURL(int requiredSecurity, boolean mustBeMaster) -  ,   ,         ,   ServiceRecord. 
     ,   getConnectionURL()   URL     . 
ServiceRecord serviceRecord; : : //    ServiceRecord  ,  // getConnectionURL   URL. String url= serviceRecord.getConnectionURL(ServiceRecord.AUTHENTICATE_ENCRYPT, false); 
 , JSR-82       ,     Bluetooth  . 
Bluepad -  Bluetooth 
      .
    Sony Ericsson P900,   ,     Bluetooth.           ,        .          . 
   , ,   Bluetooth  . 
Bluepad -   ,   J2ME MIDP 2.0   JSR-82 Bluetooth API. 
#ff0000      Developing Applications with the Java APIs for Bluetooth (JSR-82),    http://developer.sonyericsson.com
#0000ff : aRix.