Newsgroup: it.comp.java
Titolo: help j2me: jsr 82 (bluetooth apis)

Salve,
qualcuno saprebbe darmi un link ad un buon tutorial (con abbondanti esempi 
di codice) per l'utilizzo delle api per il bluetooth di j2me?
O, alternativamente, mi dareste una mano a capire alcune cose che mi sono 
poco chiare sulla procedura da seguire per eseguire il discovery ed aprire 
una connessione (dal lato client) l2cap con un dispositivo server? Dunque, 
ecco il mio dubbio principale
Per creare la connessione dovrei utilizzare la seguente riga di codice:
L2CAPConnection con = (L2CAPConnection) Connector.open (URL);
Dove URL č una stringa nel formato "btl2cap://0050C000321B:1000"
Da dove lo prendo questo url? E che cosa rappresenta? E' forse il mac 
address del dispositivo bt chiamato? E il numero dopo i due punti? Ho letto 
che č un canale logico. Posso qiundi intenderlo simile al numero di porta 
utilizzato per le connessioni tcp?
Ho letto che l'url dovrebbe essere restituito dal metodo: 
ServiceRecord.getConnectionURL(), ma se sono piů d'uno i dispositivi 
scoperti, come faccio a sapere a quale si riferisce l'url restituito?
In effetti ce ne sarebbero molti altri, ma prima vorrei fare ordine nella 
mia testa...
Grazie, ciao 

Guarda, io ho trovato un tutorial sul sito di java...
e inoltre mi sono scaricato la specifica sempre dal sito della Sun...
Cmq in genere si fa cosi:
C'è un metodo che serve per recuperare i dispositivi: questo metodo è
basato sui thread, e ci sono delle interfaccie che devi implementare
del tipo onDiscovered etc.
Per ogni dispositivo c'è un metodo che ti permettere di cercare
SERVIZI dato un dispositivo (che tu hai trovato in precedenza).
Per ogni servizio trovato. puoi ottenere la URL, che contiene info sul
buletooth(indirizzo fisico), sull' id del servizio (tipo la porta), e
sul protocollo (tipo USP/TCP)
Se hai bisogno chiedimi pure!


Salve,
scusate se mi intrometto..
qualche settimana fa avevo postato un messaggio riguardo alla 
comunicazione bluetooth tra dispositivi mobili e desktop... messaggio 
che è rimasto senza risposta :(
Non è che potresti darmi qualche informazione a riguardo?
Il topic del mio post era "comunicazione bluetooth j2me - j2se"
Grazie,
Jack
PS: auguri di buon Natale e Anno Nuovo a tutti!

scusami, non vengo tanto sui ng quindi non l'avevo visto!
a questo indirizzo puoi scaricare la specifica ufficiale: la trovo
abbastanza chiara:
http://jcp.org/aboutJava/communityprocess/final/jsr082/index.html
Nota che questa è una SPECIFICA, cioe non ci sono i file jar.
Devi poi trovare "qualcuno" che con ti fornisca delle classi che
implementino questa specifica.
In ambiente j2se  io ho provato ATINAV (
www.atinav.com
)...è semplice
da utilizzare e compatto...ti sconsiglio invece javabluetooth, che piu
un casino da usare.
Per j2me, è possibile scaricare il WTK2.2 della Sun(ambiente per fare
applicazioni j2me), che contiene fra le altre cose un simulatore per
bluetooth e le api bluetooth.
Poi puoi guardare anche qui:
1) 
http://www.javabluetooth.com/faq.html
2)  
http://developers.sun.com/techtopics/mobility/midp/ttips/BTintro/
 e
dopo
http://developers.sun.com/techtopics/mobility/midp/articles/bluetooth2/
Ti darei del codice gia fatto, ma non ce l'ho sottomano!

 
Se ti capita sottomano.. mi faresti un grandissimo favore :)
Comunque grazie mille per tutto!
Jack

Se hai bisogno chiedimi pure!
E' esattamente quello che ho fatto, come vedi :D
Cmq, posso scriverti anche via email, se ho altro da chiederti al riguardo?
Mi spiace di sembrare ottuso, ma non sono abituato a programmare ad oggetti 
(il mio linguaggio è il c), ed inoltre sono abituato a "pensare" con le 
socket quando mi trovo a programmare un client/server, mentre con il 
bluetooth la cosa funziona in maniera molto differente.
Grazie mille, ciao 

Ciao!
Esatto!
quando vuoi fare una ricerca devi implementare i metodi
DiscoveryListener.deviceDiscovered(RemoteDevice btDevice, DeviceClass
cod)
ed
DiscoveryListener.inquiryCompleted(int discType)
quando richiami la ricerca con statInquiry, viene attivato un NUOVO
THREAD, NON BLOCCANTE, il  quale
1) cerca i dispositivi, e per ogni dispositivo, crea gli appositi
oggetti RemoteDevice e DeviceClass
e richiama il metodo deviceDiscovered. in questo metodo tu puoi fare
cio che vuoi,
tipicamente salvi i dispositivi che trovi e che ti interessano in un
vector.
2)Al termine della ricerca viene richiamato il metodo
inquiryCompleted(int discType)
il metodo startInquiry non è bloccante, perche attiva questo thread,
per realizzare il blocco, fai cosi:
syncronized(objCondiviso)
{
  startInquiry();
  try{ objCondiviso.wait(); } catch(Exception waitex) {}
}
e in inquiryCompleted scriverai
syncronized(objCondiviso)
{
objCondiviso.notify();
}
Analogo discorso avviene per la scoperta dei servizi...
attrset dovrebbe essere gli attributi sel servizio che vuoi
recuperare...se metti null dovrebbe restituirti quelli di default...
uuidset è un array di uuid, che serve per filtrare solo i servizi il
cui UID è fra quelli specificati...
se metti null non filtra nulla per UID (l'uid è come la porta di TCP,
per intenderci)
Certo che mi puoi scrivere quando vuoi! :)