Autore Topic: Aiuto su app Bluetooth  (Letto 1603 volte)

Offline LupinIV

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos
  • Sistema operativo:
    Ubuntu 10.10
Aiuto su app Bluetooth
« il: 16 Aprile 2011, 16:43:30 CEST »
0
Ciao a tutti, complimenti  per forum, veramente ben fatto e con un sacco di informazioni utili,(grazie anche a chi lo popola ;) ).
Volevo chiedervi un consiglio visto che sono un neofita sia in java che in android. Volevo creare un app bluetooth che manda file senza nessuna connessione in modo che chiunque nel raggio d'azione possa riceverlo (ovviamente con un apposito programma). Mi spiego meglio, io dal mio telefonino lancio una l'app e trasmetto senza collegarmi a nessun dispotivo una canzone o un qualunque file, in modo che chiunque stia in ricezione possa riceverla. Come se fosse una radio, o un barracchino, o un wolkie tolky (si scrive cosi??).  Ho gia combinato qualcosa, mi sono letto le api di android e sono riuscito ad attivare il bluetooth, a fare un interfaccia grafica, ma ho il problema quando devo aprire un socket visto che mi richiede un device a cui collegarmi e io non devo collgarmi a nessuno.Grazie in anticipo

Offline elcaurro

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Nexus One, Motorola Atrix, nexus 7, Tab A2, Tab S2
  • Sistema operativo:
    Mac OsX
Re:Aiuto su app Bluetooth
« Risposta #1 il: 16 Aprile 2011, 16:51:20 CEST »
0
Ma sei sicuro che si possa fare? Io non ho mai usato il bt in nessuna app però per quel poco che so, due dispositivi per comunicare via bluetooth devono essere "accoppiati".

Offline LupinIV

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos
  • Sistema operativo:
    Ubuntu 10.10
Re:Aiuto su app Bluetooth
« Risposta #2 il: 16 Aprile 2011, 17:00:09 CEST »
0
Credo di si, non so se con le normali api di android o con altre librerie di java ma credo si possa fare

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Aiuto su app Bluetooth
« Risposta #3 il: 16 Aprile 2011, 17:11:05 CEST »
0
Credo di si, non so se con le normali api di android o con altre librerie di java ma credo si possa fare

Questa tua credenza è confermata da qualcosa o è solo un presentimento? :D

Offline mangusto

  • Utente normale
  • ***
  • Post: 152
  • Respect: +5
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    ZTE Blade
  • Play Store ID:
    Leonardo Preti
  • Sistema operativo:
    Windows 7
Re:Aiuto su app Bluetooth
« Risposta #4 il: 16 Aprile 2011, 19:10:39 CEST »
0
Che io sappia tutti e due i cellulari devono confermare l'invio/ricezione (anche se non per forza accoppiati, quello mi sa che dipende dal SO). Poi magari sbaglio

Offline LupinIV

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos
  • Sistema operativo:
    Ubuntu 10.10
Re:Aiuto su app Bluetooth
« Risposta #5 il: 16 Aprile 2011, 19:31:15 CEST »
0
Da quanto ho letto su wikipedia ogni dispositivo bluetooth può avere connessioni acl o sco. la sco è quella sincrona e quindi connection-oriented e la acl è quella asincora (ACL, Asynchronous ConnectionLess), quindi in teoria potrei farlo, dovrei solo abilitare il cellulare aprendo una socket, appunto dove riscontro il problema.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Aiuto su app Bluetooth
« Risposta #6 il: 16 Aprile 2011, 19:41:23 CEST »
0
La funzione che descrivi, una specie di Bluetooth broadcast, dovrebbe essere quella che viene (veniva) usata per fare il proximity marketing.

Purtroppo, che io sappia, non si trasmette nell'etere a chiunque voglia prendere la trasmissione. La base (quella che fa trasmette) è in continuo discovery di dispositivi e ogni volta che ne trova uno, avvia il pairing, a quel punto sul terminale di tale dispositivo appare il popup per accettare la connessione e la successiva trasmissione.

Il problema principale di questa procedura, che di fatto non è quasi più usata, è che i telefoni non sono più in discoverability permanente. Per esempio Android di default limita la discoverability a massimo 120 secondi (più altri 300 secondi come opzione), e non è possibile tenerlo permanentemente in tale stato se non con versioni rooted.

Qua si parla di discoverability : Bluetooth | Android Developers
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline LupinIV

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos
  • Sistema operativo:
    Ubuntu 10.10
Re:Aiuto su app Bluetooth
« Risposta #7 il: 17 Aprile 2011, 15:47:58 CEST »
0
raga e faccio un server rfcomm (quindi apro il socket ma sono in ascolto) e poi do il comando outputstream dovrebbe andare???

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Aiuto su app Bluetooth
« Risposta #8 il: 18 Aprile 2011, 10:15:48 CEST »
0
raga e faccio un server rfcomm (quindi apro il socket ma sono in ascolto) e poi do il comando outputstream dovrebbe andare???

Se fai da server RFCOMM e rimani in ascolto, il socket non si apre sino a che un client non si connette, per cui non puoi mandare niente in output.

Guarda, questo è un estratto dal Thread dell'esempio BluetoothChat che fa il "server" e cerca di aprire il socket.

Codice (Java): [Seleziona]
        public void run() {
            if (D) Log.d(TAG, "BEGIN mAcceptThread" + this);
            setName("AcceptThread");
            BluetoothSocket socket = null;

            // Listen to the server socket if we're not connected
            while (mState != STATE_CONNECTED) {
                try {
                    // This is a blocking call and will only return on a
                    // successful connection or an exception
                    socket = mmServerSocket.accept();
                } catch (IOException e) {
                    Log.e(TAG, "accept() failed", e);
                    break;
                }

                // If a connection was accepted
                if (socket != null) {
                    synchronized (BluetoothChatService.this) {
                        switch (mState) {
                        case STATE_LISTEN:
                        case STATE_CONNECTING:
                            // Situation normal. Start the connected thread.
                            connected(socket, socket.getRemoteDevice());
                            break;
                        case STATE_NONE:
                        case STATE_CONNECTED:
                            // Either not ready or already connected. Terminate new socket.
                            try {
                                socket.close();
                            } catch (IOException e) {
                                Log.e(TAG, "Could not close unwanted socket", e);
                            }
                            break;
                        }
                    }
                }
            }
            if (D) Log.i(TAG, "END mAcceptThread");
        }

Come vedi il thread rimane indefinitamente a cercare di fare socket = mmServerSocket.accept();. Solo quando viene accettato il socket, allora l'esecuzione procede con il thread connected che si occupa di stabilire la connessione vera e propria.


Per quello che ne so, quello che dici di voler fare è impossibile. Però è anche vero che potrei sbagliarmi, per cui ti chiedo: hai qualche riferimento ad un esempio esistente di quello che vuoi fare, oppure nasce da una tua esigenza e non sai se si può fare?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline LupinIV

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Vodafone Ideos
  • Sistema operativo:
    Ubuntu 10.10
Re:Aiuto su app Bluetooth
« Risposta #9 il: 18 Aprile 2011, 17:40:59 CEST »
0
il progetto nasce da una mia esigenza volevo guadagnare con il market android e mi era venuta in mente questa idea guardando un vecchio baracchino che ho a casa, documentandomi su wikipedia vidi che il bluetooth supportava le acl (e da come ho capito trasmissioni senza connessioni). Il problema sorgeva in quanto, in fase di sviluppo avevo riscontrato questo problema non risolvibile con le api android. Da quanto ho capito però il tipo di trasmissione (se connction-less o connection-oriented) viene governato dal modulo l2cap. Speriamo bene ;)...

Edit:
Come pensavo quello che voglio fare e possibile questo l'hopreso dalla documentazione delle api java JSR-82 (appunto quella sul bluetooth):

10.1 Introduction
This chapter describes the L2CAP API, including the classes, methods and constants. L2CAP supports
two types of connections, connection-oriented (bi-directional) and connectionless (uni-directional). All
connections made using the connect service primitive provided by the L2CAP layer of the stack are
connection-oriented. Connectionless data channels are established using the group communication
concept provided by the L2CAP layer. This API does not support group communication and hence does
not support connectionless channels.

Solo che ora dovrei scrivermi io la funzione o trovare una libreria che supporti la connectionless. Avete qualche idea???
« Ultima modifica: 19 Aprile 2011, 09:33:53 CEST da LupinIV »