CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: 4eyes81 con ben 3 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: elmegio con ben 7 Thanks ricevuti negli ultimi sette giorni
Utente del mese: bluemask con ben 43 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 3 su 3
Discussione:

Android e Bluetooth

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    May 2011
    Messaggi
    11

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Android e Bluetooth

    Salve a tutti.
    Devo sviluppare un'applicazione per android che utilizzi il bluetooth.
    Per iniziare a provare ho seguito i tutorial del sito e ho realizzato due applicazione una client e una server che si scambiano dati e la connessione avviene tramite l'UUID.
    Il server si mette in ascolto mediante questa funzione:

    listenUsingRfcommWithServiceRecord()

    e il client si connette utilizzando questa:

    createRfcommSocketToServiceRecord(UUID)

    e l'elemento comune e' l'uuid.

    Ora per esigenze particolari devi effettuare una connessione senza utilizzare l'uuid.
    Leggendo qua e la su google ho scoperto che esistono dei metodi "nascosti" da chiamare via reflect.

    Uno di questi e': createRfcommSocket la cui controparte server potrebbe essere: listenUsingRfcommOn

    Quello che succede e':

    1) i metodi esistono perche' non mi da errore di tipo NoSuchMethodError

    2) il server parte senza dare errori, apparentemente listenUsingRfcommOn funziona

    3) createRfcommSocket da invece dei problemi; la connect torna ok pero' poi ho errori di read-write sugli Input/Output Stream.
    La cosa strana e' che se, ad esempio, lancio il client senza il server il metodo torna subito ok (come se fosse andato bene) mentre avrebbe dovuto provare un po' a connettersi e poi dare un errore di timeout o di servizio non trovato (come capita quando uso createRfcommSocketToServiceRecord)

    La mia impressione e' che createRfcommSocket ritorni automaticamente un socket fittizio, senza neanche provare a fare la connessione.

    Sto usando android 2.1 e ho provato su terminali HTC Desire, Nexus One e Galaxy I9000.

    qualcuno mi sa dire qualcosa?

    ciao e grazie
    Sandro

  2.  
  3. #2
    Baby Droid


    Registrato dal
    Oct 2010
    Messaggi
    3

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Il problema della connect che va a buon fine, senza effettivamente che il server sia in piedi l o dava anche a me.. se ti puo' essere utile io ho risolto il problema con il metodo avaible() della socket in lettura.. ovvero verifica se un canale è disponibile o meno.. quindi se lanci un thread
    boolean timeout = true;
    for(int i = 0; i < 1000; i++)
    {
    if( stream.avaible() > 0)
    {
    timeout = false;
    break; // qualcuno ha scritto sulla socket( nel tuo caso ik server)

    }
    sleep(1); // da fare con try catch
    }

    if(timeout) return 0;

    doWork() ...

    ovvero verifica la presenza dell'altro lato per un secondo.. se si verifica il timeout ( nell esmepio di un secondo) ritorna 0

    Il problema del Blueooth è che il protocollo RFCOMM ha un timeout di disconessione molto elevato.. leggendo un articolo tempo fà lessi che era di 60 secondi ma non prenderlo come un dato certo visto che non l ho mai verificato...

    Per quanto riguarda l'UUID credo sia indispensabile per una comunicazione Bluetooth, anche per una questione di sicurezza..altrimenti intercetti o potresti intercettare il traffico di tutte le applicazioni che utilizzano il Bluetooth.. e la cosa sarebbe un problema sopratutto su android 2.3.3 che ha le socket non sicure..

  4. #3
    Baby Droid


    Registrato dal
    May 2011
    Messaggi
    11

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Grazie per la risposta!
    A me servirebbe davvero sapere se e come far funzionare le funzioni "nascoste" che dovrebbero permettere la connessione senza utilizzare l'UUID.
    Cmq grazie per il suggerimento!

    ciao
    Sandro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy