2009-12-10 8 views
1

J'essaie de créer un MIDlet qui fournit un service disponible publiquement, mais le code ci-dessous ne suffit pas. Le service est activé (pas d'exception) mais toujours pas détectable.Comment rendre un service Bluetooth publiquement détectable?

public StreamConnection waitForConnection() throws IOException { 

    if (this.notifier == null) { 
     // Create a server connection (a notifier) 
     this.notifier = (StreamConnectionNotifier) Connector.open(serviceURL); 
    } 
    return this.notifier.acceptAndOpen(); 
} 

l'URL est construit comme suit

private final static String serviceURL = "btspp://localhost:" + servieceUUID + 
     ";name=" + serviceName + ";authenticate=false;master=false;encrypt=false"; 

Après quelques googler j'ai trouvé qu'un code comme celui-ci aide Hould:

 final ServiceRecord sr = LocalDevice.getLocalDevice().getRecord(this.notifier); 
     //Public browse group UUID 
     final DataElement element = new DataElement(DataElement.DATSEQ); 
     element.addElement(new DataElement(DataElement.UUID, new UUID(0x1002))); 
     sr.setAttributeValue(0x0005, element); 
     LocalDevice.getLocalDevice().updateRecord(sr); 

mais d'abord il ne résout pas le problème et Deuxièmement, je n'ai aucune idée de ce qu'il fait réellement.

J'utilise le Nokia E70.

Des idées?

Merci d'avance.

+0

Quel type de service essayez-vous de créer? Que fait la découverte? Avez-vous écrit le code qui essaie de le découvrir? – funkybro

Répondre

0

Avez-vous essayé d'utiliser la méthode setDiscoverable?

+0

Jup - simplement oublié de le mettre dans un échantillon de code bu c'est là :) –

0

Je sais que cette question est vraiment ancienne, mais j'ai juste couru dedans et après une journée de battre ma tête contre le mur, j'ai trouvé la solution.

Vous devez définir la classe de service ID du service à quelque chose de connu:

ServiceRecord sr = LocalDevice.getLocalDevice().getRecord(service); 
DataElement de = new DataElement(DataElement.DATSEQ); 
DataElement uuid = new DataElement(DataElement.UUID, new UUID("1101",false)); 
de.addElement(uuid); 
sr.setAttributeValue(0x0001, de); 
LocalDevice.getLocalDevice().updateRecord(sr); 

UUID 0x1101 est un périphérique série (j'ai choisi cette manière arbitraire) et l'attribut 0x0001 est l'attribut class service d'identification.

Questions connexes