Autore Topic: Problema con bluetooth  (Letto 1481 volte)

Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Problema con bluetooth
« il: 07 Maggio 2015, 09:27:30 CEST »
0
Ciao a tutti, ho un problema sulla classe bluetooth della mia app: non capisco perchè a volte (in modo del tutto casuale) non visualizzo nessun dispositivo bluetooth nelle vicinanze anche se in realtà sono presenti. In un altro caso, invece, mi succede che non visualizzo nessun dispositivo quando dalla mia app chiedo di attivare il bluetooth nel caso in cui fosse spento. Il codice della mia classe bluetooth è il seguente:

Codice (Java): [Seleziona]
public class Bluetooth extends Activity implements OnItemClickListener {

    public static void disconnect() {
        if (connectedThread != null) {
            connectedThread.cancel();
            connectedThread = null;
        }
    }

    public static void gethandler(Handler handler) {//Bluetooth handler
        mHandler = handler;
    }

    static Handler mHandler = new Handler();

    static ConnectedThread connectedThread;
    public static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
    protected static final int SUCCESS_CONNECT = 0;
    protected static final int MESSAGE_READ = 1;
    ArrayAdapter<String> listAdapter;
    ListView listView;
    static BluetoothAdapter btAdapter;
    Set<BluetoothDevice> devicesArray;
    ArrayList<String> pairedDevices;
    ArrayList<BluetoothDevice> devices;
    IntentFilter filter;
    BroadcastReceiver receiver;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bluetooth);
        init();
        if (btAdapter == null) {
            Toast.makeText(getApplicationContext(), "No bluetooth detected", Toast.LENGTH_SHORT).show();
            finish();
        } else {
            if (!btAdapter.isEnabled()) {
                turnOnBT();
            }
            getPairedDevices();
            startDiscovery();
        }

    }


    private void startDiscovery() {
        // TODO Auto-generated method stub
        btAdapter.cancelDiscovery();
        btAdapter.startDiscovery();
    }

    private void turnOnBT() {
        Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(intent, 1);
    }

    private void getPairedDevices() {
        devicesArray = btAdapter.getBondedDevices();
        if (devicesArray.size() > 0) {
            for (BluetoothDevice device : devicesArray) {
                pairedDevices.add(device.getName());
            }
        }
    }

    private void init() {
        listView = (ListView) findViewById(R.id.listView);
        listView.setOnItemClickListener(this);
        listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, 0);
        listView.setAdapter(listAdapter);
        btAdapter = BluetoothAdapter.getDefaultAdapter();
        pairedDevices = new ArrayList<String>();
        filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
        devices = new ArrayList<BluetoothDevice>();
        receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                    devices.add(device);
                    String s = "";
                    for (int a = 0; a < pairedDevices.size(); a++) {
                        if (device.getName() != null && device.getName().equals(pairedDevices.get(a))) {
                            //append
                            s = "(Paired)";
                            break;
                        }
                    }
                    listAdapter.add(device.getName() + " " + s + " " + "\n" + device.getAddress());

                } else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {

                } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {

                } else if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
                    if (btAdapter.getState() == btAdapter.STATE_OFF) {
                        turnOnBT();
                    }
                }
            }

        };

//        registerReceiver(receiver, filter);
//        IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
//        registerReceiver(receiver, filter);
//        filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
//        registerReceiver(receiver, filter);
//        filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
        registerReceiver(receiver, filter);
        filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
        registerReceiver(receiver, filter);
        filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
        registerReceiver(receiver, filter);
        filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
        registerReceiver(receiver, filter);
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        try {
            unregisterReceiver(receiver);
        } catch (IllegalArgumentException e) {
            // ignored
        }
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_CANCELED) {
            Toast.makeText(getApplicationContext(), "Bluetooth must be enabled to continue", Toast.LENGTH_SHORT).show();
            finish();
        }
    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        // TODO Auto-generated method stub
        if (btAdapter.isDiscovering()) {
            btAdapter.cancelDiscovery();
        }
        if (listAdapter.getItem(arg2).contains("(Paired)")) {

            BluetoothDevice selectedDevice = devices.get(arg2);
            ConnectThread connect = new ConnectThread(selectedDevice);
            connect.start();
        } else {
            Toast.makeText(getApplicationContext(), "device is not paired", Toast.LENGTH_SHORT).show();
        }
    }

Qualcuno ha qualche idea su dove potrebbe essere l'errore?
Grazie in anticipo :)

Offline wlf

  • Utente normale
  • ***
  • Post: 315
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Problema con bluetooth
« Risposta #1 il: 07 Maggio 2015, 12:33:57 CEST »
0
non capisco perchè a volte (in modo del tutto casuale) non visualizzo nessun dispositivo bluetooth nelle vicinanze anche se in realtà sono presenti.
In un altro caso, invece, mi succede che non visualizzo nessun dispositivo quando dalla mia app chiedo di attivare il bluetooth nel caso in cui fosse spento.

Considera che i dispositivi bluetooth presenti broadcastano il loro nome ogni tot secondi; la tua startDiscovery() dura circa 15-16 secondi. Se vai anche nelle impostazioni/bluetooth e tappi su "Ricerca dei dispositivi" noterai le stesse tempistiche e probabilmente lo stesso problema che segnali. Si comporta allo stesso modo, se nel periodo in ascolto sente il broadcast lo visualizza, altrimenti picche! :)

Nel tuo codice assegni un listAdapter alla listView ma non ho trovato nulla che notifichi che il tuo dataset è cambiato; devi quindi notificarglielo per fare in modo che nella listView appaia il dispositivo che è stato trovato, altrimenti devi cercarli prima di far partire la listView.
Ti consiglio di mettere anche una serie di Log.d per capire cosa sta accadendo, quando viene fatto lo start della discover e lo stop, e quando viene trovato un BluetoothDevice. Sono tutte azioni che altrimenti sarebbero "invisibili". In circa 15 secondi il bluetooth a me notifica 3 volte la sua presenza, una volta ogni 5 secondi mediamente, ma presumo che dipenda da dispositivo a dispositivo.

Prova a modificare la tua init() come l'esempio sottostante:
Codice (Java): [Seleziona]
        private void init() {
                listView = (ListView) findViewById(R.id.listView);
                listView.setOnItemClickListener(this);
                listAdapter = new ArrayAdapter<String>(this,
                                android.R.layout.simple_list_item_1, 0);
                listView.setAdapter(listAdapter);
                btAdapter = BluetoothAdapter.getDefaultAdapter();
                pairedDevices = new ArrayList<String>();
                filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
                devices = new ArrayList<BluetoothDevice>();
                receiver = new BroadcastReceiver() {
                        @Override
                        public void onReceive(Context context, Intent intent) {
                                String action = intent.getAction();
                                if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                                        BluetoothDevice device = intent
                                                        .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                                        devices.add(device);
                                        Log.d("TAG", "device: " + device.getName());
                                        String s = "";
                                        for (int a = 0; a < pairedDevices.size(); a++) {
                                                if (device.getName() != null
                                                                && device.getName()
                                                                                .equals(pairedDevices.get(a))) {
                                                        // append
                                                        s = "(Paired)";
                                                        break;
                                                }
                                        }
                                        listAdapter.add(device.getName() + " " + s + " " + "\n"
                                                        + device.getAddress());
                                        listAdapter.notifyDataSetChanged();

                                } else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED
                                                .equals(action)) {
                                        Log.d("TAG", "ACTION_DISCOVERY_STARTED");

                                } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED
                                                .equals(action)) {
                                        Log.d("TAG", "ACTION_DISCOVERY_FINISHED");

                                } else if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
                                        if (btAdapter.getState() == btAdapter.STATE_OFF) {
                                                turnOnBT();
                                        }
                                }
                        }

                };

                registerReceiver(receiver, filter);
                filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
                registerReceiver(receiver, filter);
                filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
                registerReceiver(receiver, filter);
                filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
                registerReceiver(receiver, filter);
        }

Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Problema con bluetooth
« Risposta #2 il: 07 Maggio 2015, 12:49:41 CEST »
0
Grazie mille per la risposta! Ho modificato l'init() come mi hai detto tu però continuo ad avere lo stesso problema:
Codice: [Seleziona]
05-07 12:44:28.159    4762-4762/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_STARTED
05-07 12:44:28.809    4762-4762/da.to.iacer D/TAG﹕ device: XXXX
05-07 12:44:29.649    4762-4762/da.to.iacer D/TAG﹕ device: XXXX
05-07 12:44:31.959    4762-4762/da.to.iacer D/TAG﹕ device: XXXX
05-07 12:44:32.809    4762-4762/da.to.iacer D/TAG﹕ device: XXXX
05-07 12:44:41.029    4762-4762/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_FINISHED
05-07 12:44:46.139    4762-4762/da.to.iacer D/BluetoothAdapter﹕ startDiscovery
05-07 12:44:46.149    4762-4762/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_FINISHED
05-07 12:44:46.159    4762-4762/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_STARTED
05-07 12:44:47.049    4762-4762/da.to.iacer D/TAG﹕ device: XXXX
05-07 12:44:47.389    4762-4762/da.to.iacer D/TAG﹕ device: XXXX
05-07 12:44:54.169    4762-4762/da.to.iacer D/TAG﹕ device: XXXX
05-07 12:44:59.029    4762-4762/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_FINISHED


I dispositivi trovati sono differenti, la prima volta ne ha trovati 4 mentre la seconda volta 3. Questo dipende dal problema che hai descritto nel post precedente al mio? Se si, c'è una soluzione?
Grazie! :)

P.S. dalle tempistiche mi sembra che il DISCOVERY duri meno di 15 secondi. Sbaglio qualcosa?

Offline wlf

  • Utente normale
  • ***
  • Post: 315
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Problema con bluetooth
« Risposta #3 il: 07 Maggio 2015, 15:31:48 CEST »
0
Ho modificato l'init() come mi hai detto tu però continuo ad avere lo stesso problema:
Codice: [Seleziona]
05-07 12:44:28.159    4762-4762/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_STARTED
05-07 12:44:28.809    4762-4762/da.to.iacer D/TAG﹕ device: XXXX
05-07 12:44:29.649    4762-4762/da.to.iacer D/TAG﹕ device: XXXX
05-07 12:44:31.959    4762-4762/da.to.iacer D/TAG﹕ device: XXXX
05-07 12:44:32.809    4762-4762/da.to.iacer D/TAG﹕ device: XXXX
05-07 12:44:41.029    4762-4762/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_FINISHED
05-07 12:44:46.139    4762-4762/da.to.iacer D/BluetoothAdapter﹕ startDiscovery
05-07 12:44:46.149    4762-4762/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_FINISHED
05-07 12:44:46.159    4762-4762/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_STARTED
05-07 12:44:47.049    4762-4762/da.to.iacer D/TAG﹕ device: XXXX
05-07 12:44:47.389    4762-4762/da.to.iacer D/TAG﹕ device: XXXX
05-07 12:44:54.169    4762-4762/da.to.iacer D/TAG﹕ device: XXXX
05-07 12:44:59.029    4762-4762/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_FINISHED

Non mi è chiaro come hai fatto a far ripartire la discover visto che dal termine della prima ci sono solo 0.010 secondi; hai cambiato qualcosa nel codice per farla ripartire?

Citazione
I dispositivi trovati sono differenti, la prima volta ne ha trovati 4 mentre la seconda volta 3. Questo dipende dal problema che hai descritto nel post precedente al mio?

Se lasciavi il nome dei dispositivi, invece di sostituirlo con XXXX, sarebbe stato più esplicativo; avrei potuto controllare le tempistiche di ogni dispositivo a broadcastare la propria presenza. :)
Comunque non è detto che mettendoti in ascolto con una startDiscovery() si riesca sempre a trovare tutti i dispositivi in campo; oltre dalla cadenza del broadcast dipende anche dalla potenza del segnale bluetooth, dalla sensibilità dell'antenna dello smartphone, dall'eventuale concomitanza di traffico Wifi, etc ...

Citazione
Se si, c'è una soluzione?

Ni; la soluzione è quella di ripetere la discovery; eventualmente metti un pulsante per ripetere tale attività, non farlo ripetutamente a prescindere perché la startDiscovery() è descritta anche dalla documentazione come una delle attività più pesanti. Sarebbe buona cosa inoltre interrompere la discover nella OnPause riprendendola nella OnResume.

Citazione
P.S. dalle tempistiche mi sembra che il DISCOVERY duri meno di 15 secondi. Sbaglio qualcosa?

La documentazione dice: "The discovery process usually involves an inquiry scan of about 12 seconds" "Device discovery is a heavyweight procedure."
Dal tuo log si vede che sono circa 13 secondi; anche a me da più o meno lo stesso tempo, ma in un mio programma che ho verificato prima avevo un tempo leggermente più lungo.

Codice: [Seleziona]
05-07 14:40:31.504: D/TAG(28963): ACTION_DISCOVERY_STARTED
05-07 14:40:34.715: D/TAG(28963): device: MYDEV_01
05-07 14:40:34.757: D/TAG(28963): device: MYDEV_01
05-07 14:40:39.569: D/TAG(28963): device: MYDEV_01
05-07 14:40:44.295: D/TAG(28963): ACTION_DISCOVERY_FINISHED

Come puoi vedere il mio unico device bluetooth broadcasta a cadenze non fisse; anche facendo diversi tentativi le tempistiche variano da pochi millisecondi a diversi secondi ... :(

A parte tutto non ho ancora capito cosa vuoi ottenere; se mi spieghi qual'è il problema forse potrei esserti più utile. Le singole e svariate sfaccettature del bluetooth a mio avviso sono poco significative; se sei finito in un vicolo cieco non posso tirarti fuori non sapendo qual'è la tua destinazione! ;)

Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Problema con bluetooth
« Risposta #4 il: 07 Maggio 2015, 16:08:56 CEST »
0
Dovrei connettermi ad un dispositivo bluetooth ma, anche se questo è acceso, non sempre è visibile nel mio Discovery. Vorrei evitare di avere questo problema ma non so come risolvere la cosa anche perchè a volte non trova nulla nel discovery e non è possibile.
Spero di essere stato chiaro :)

Codice: [Seleziona]
05-07 16:12:38.219  20066-20066/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_STARTED
05-07 16:12:38.259  20066-20066/da.to.iacer D/AbsListView﹕ unregisterIRListener() is called
05-07 16:12:38.269  20066-20066/da.to.iacer D/AbsListView﹕ unregisterIRListener() is called
05-07 16:12:38.619  20066-20066/da.to.iacer D/TAG﹕ device: [TV]Samsung LED40
05-07 16:12:38.649  20066-20066/da.to.iacer D/AbsListView﹕ unregisterIRListener() is called
05-07 16:12:39.619  20066-20066/da.to.iacer D/TAG﹕ device: QU013
05-07 16:12:39.649  20066-20066/da.to.iacer D/AbsListView﹕ unregisterIRListener() is called
05-07 16:12:39.659  20066-20066/da.to.iacer D/TAG﹕ device: ENRICO-HP
05-07 16:12:39.679  20066-20066/da.to.iacer D/AbsListView﹕ unregisterIRListener() is called
05-07 16:12:39.799  20066-20066/da.to.iacer D/TAG﹕ device: Nike+ FuelBand SE
05-07 16:12:39.829  20066-20066/da.to.iacer D/AbsListView﹕ unregisterIRListener() is called
05-07 16:12:40.149  20066-20066/da.to.iacer D/TAG﹕ device: ENRICO-HP
05-07 16:12:40.169  20066-20066/da.to.iacer D/AbsListView﹕ unregisterIRListener() is called
05-07 16:12:43.429  20066-20066/da.to.iacer D/TAG﹕ device: QU000
05-07 16:12:43.469  20066-20066/da.to.iacer D/AbsListView﹕ unregisterIRListener() is called
05-07 16:12:45.479  20066-20066/da.to.iacer D/TAG﹕ device: DAVIDE
05-07 16:12:45.499  20066-20066/da.to.iacer D/AbsListView﹕ unregisterIRListener() is called
05-07 16:12:55.449  20066-20066/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_FINISHED


Eccolo
« Ultima modifica: 07 Maggio 2015, 16:13:46 CEST da davix10 »

Offline wlf

  • Utente normale
  • ***
  • Post: 315
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Problema con bluetooth
« Risposta #5 il: 07 Maggio 2015, 17:33:18 CEST »
0
Codice: [Seleziona]
05-07 16:12:38.219  20066-20066/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_STARTED
05-07 16:12:38.619  20066-20066/da.to.iacer D/TAG﹕ device: [TV]Samsung LED40
05-07 16:12:39.619  20066-20066/da.to.iacer D/TAG﹕ device: QU013
05-07 16:12:39.659  20066-20066/da.to.iacer D/TAG﹕ device: ENRICO-HP
05-07 16:12:39.799  20066-20066/da.to.iacer D/TAG﹕ device: Nike+ FuelBand SE
05-07 16:12:40.149  20066-20066/da.to.iacer D/TAG﹕ device: ENRICO-HP
05-07 16:12:43.429  20066-20066/da.to.iacer D/TAG﹕ device: QU000
05-07 16:12:45.479  20066-20066/da.to.iacer D/TAG﹕ device: DAVIDE
05-07 16:12:55.449  20066-20066/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_FINISHED
Eccolo

Come puoi vedere questa volta la tua discover ci ha messo più di 12 secondi, addirittura circa 17 secondi! Il device ENRICO-HP ha broadcastato addirittura a distanza di meno di 1 secondo. Il dispositivo che vuoi discoverare è DAVIDE?
Di che dispositivo SPP si tratta? Si potrebbe impostare? Se hai la possibilità di interagire con il firmwarista del dispositivo potresti casomai chiedergli di broadcastare più frequentemente.

Citazione
Dovrei connettermi ad un dispositivo bluetooth ma, anche se questo è acceso, non sempre è visibile nel mio Discovery. Vorrei evitare di avere questo problema ma non so come risolvere la cosa anche perchè a volte non trova nulla nel discovery e non è possibile.

Come fai a dire che non è possibile che non lo trovi? Ci metteresti la mano sul fuoco che broadcasta frequentemente o quantomeno abbastanza perché in tutte le discover venga individuato? Quanto alla potenza del segnale BT potresti visualizzarla; casomai è solo dovuto al fatto che il dispositivo ha un segnale così basso da non essere captato sempre.
Provi a verificare che anche dalle impostazioni del telefono (Impotazioni/bluetooth) facendo "Ricerca dispositivi" venga individuato tutte le volte?

Mi modifichi la ACTION_FOUND con queste due righe al posto della Log.d:

Codice: [Seleziona]
                                        int  rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE);
                                        Log.d("TAG", "device: " + device.getName() + " rssi: " + rssi);

Mi modifichi la ACTION_DISCOVERY_FINISHED aggiungendo questa riga dopo la Log.d per fare in modo di fare una sequenza di discover in continuazione e vedere ogni quanto broadcasta effettivamente il tuo dispositivo BT:

Codice: [Seleziona]
                                        btAdapter.startDiscovery();

Praticamente affrontiamo il problema da 2 fronti; che la potenza del segnale sia debole, e quindi non lo ricevi, oppure che il dispositivo non broadcasti così frequentemente, in questo caso devi rivolgerti al produttore o al firmwarista che ha realizzato il firmware per il dispositivo ...  ;)

Se mi mandi il log specificandomi quel'è il nome del BT che devo guardare posso darti un resoconto ... ;)
« Ultima modifica: 07 Maggio 2015, 17:40:39 CEST da wlf »

Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Problema con bluetooth
« Risposta #6 il: 08 Maggio 2015, 08:57:46 CEST »
0
Grazie mille per l'aiuto!
Questo è il mio logcat:

Codice: [Seleziona]
05-08 08:27:45.763  20700-20700/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_STARTED
05-08 08:27:46.853  20700-20700/da.to.iacer D/TAG﹕ device: DAVIDE rssi: -54
05-08 08:27:58.623  20700-20700/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_FINISHED
05-08 08:27:58.623  20700-20700/da.to.iacer D/BluetoothAdapter﹕ startDiscovery
05-08 08:27:58.673  20700-20700/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_STARTED
05-08 08:28:05.093  20700-20700/da.to.iacer D/TAG﹕ device: DAVIDE rssi: -55
05-08 08:28:11.593  20700-20700/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_FINISHED
05-08 08:28:11.593  20700-20700/da.to.iacer D/BluetoothAdapter﹕ startDiscovery
05-08 08:28:11.633  20700-20700/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_STARTED
05-08 08:28:15.513  20700-20700/da.to.iacer D/TAG﹕ device: DAVIDE rssi: -52
05-08 08:28:24.453  20700-20700/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_FINISHED
05-08 08:28:24.453  20700-20700/da.to.iacer D/BluetoothAdapter﹕ startDiscovery
05-08 08:28:24.503  20700-20700/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_STARTED
05-08 08:28:24.603  20700-20700/da.to.iacer D/TAG﹕ device: DAVIDE rssi: -56

Questo è lo stesso fatto da un altro dispositivo

Codice: [Seleziona]
05-08 08:37:49.001    3317-3317/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_STARTED
05-08 08:37:49.261    3317-3317/da.to.iacer D/TAG﹕ device: QU000 rssi: -58
05-08 08:37:49.701    3317-3317/da.to.iacer D/TAG﹕ device: QU013 rssi: -72
05-08 08:37:49.901    3317-3317/da.to.iacer D/TAG﹕ device: DAVIDE rssi: -57
05-08 08:37:52.021    3317-3317/da.to.iacer D/TAG﹕ device: C3300K(22**) rssi: -78
05-08 08:37:59.421    3317-3317/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_FINISHED
05-08 08:37:59.731    3317-3317/da.to.iacer D/TAG﹕ ACTION_DISCOVERY_STARTED
05-08 08:37:59.891    3317-3317/da.to.iacer D/TAG﹕ device: QU013 rssi: -54
05-08 08:38:00.681    3317-3317/da.to.iacer D/TAG﹕ device: DAVIDE rssi: -57
05-08 08:38:02.021    3317-3317/da.to.iacer D/TAG﹕ device: C3300K(22**) rssi: -74
05-08 08:38:03.261    3317-3317/da.to.iacer D/TAG﹕ device: QU000 rssi: -57

Citazione
Come fai a dire che non è possibile che non lo trovi? Ci metteresti la mano sul fuoco che broadcasta frequentemente o quantomeno abbastanza perché in tutte le discover venga individuato? Quanto alla potenza del segnale BT potresti visualizzarla; casomai è solo dovuto al fatto che il dispositivo ha un segnale così basso da non essere captato sempre.

Nel secondo caso trovo più dispositivi e soprattutto quelli che servono a me che sono i "QUxxx", in questo modo non capisco da cosa sia dovuto il problema perchè non è sistematico. Se vado in impostazioni -> bluetooth viene trovato in un attimo da tutti e due i dispositivi.
Questo è il modulo bluetooth a cui devo connettermi: http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00048919.pdf

Secondo te quale potrebbe essere il problema?



EDIT.
Il mio dispositivo rimane in discoverable per 10ms ogni 1,5 secondi quindi non penso sia quello il problema.
« Ultima modifica: 08 Maggio 2015, 09:24:10 CEST da davix10 »

Offline wlf

  • Utente normale
  • ***
  • Post: 315
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Problema con bluetooth
« Risposta #7 il: 08 Maggio 2015, 09:56:04 CEST »
0
Questo è il mio logcat:

Codice: [Seleziona]
05-08 08:27:46.853  20700-20700/da.to.iacer D/TAG﹕ device: DAVIDE rssi: -54
05-08 08:28:05.093  20700-20700/da.to.iacer D/TAG﹕ device: DAVIDE rssi: -55
05-08 08:28:15.513  20700-20700/da.to.iacer D/TAG﹕ device: DAVIDE rssi: -52
05-08 08:28:24.603  20700-20700/da.to.iacer D/TAG﹕ device: DAVIDE rssi: -56

Questo è lo stesso fatto da un altro dispositivo

Codice: [Seleziona]
05-08 08:37:49.261    3317-3317/da.to.iacer D/TAG﹕ device: QU000 rssi: -58
05-08 08:37:49.701    3317-3317/da.to.iacer D/TAG﹕ device: QU013 rssi: -72
05-08 08:37:49.901    3317-3317/da.to.iacer D/TAG﹕ device: DAVIDE rssi: -57
05-08 08:37:52.021    3317-3317/da.to.iacer D/TAG﹕ device: C3300K(22**) rssi: -78
05-08 08:37:59.891    3317-3317/da.to.iacer D/TAG﹕ device: QU013 rssi: -54
05-08 08:38:00.681    3317-3317/da.to.iacer D/TAG﹕ device: DAVIDE rssi: -57
05-08 08:38:02.021    3317-3317/da.to.iacer D/TAG﹕ device: C3300K(22**) rssi: -74
05-08 08:38:03.261    3317-3317/da.to.iacer D/TAG﹕ device: QU000 rssi: -57

Il primo Logcat è fatto con uno smartphone ed il secondo con un altro smartphone? Potresti indicarmi quali?
Escludo che ci sia un problema di segnale bluetooth, i valori sono tutti mediamente alti, quindi hai un segnale forte, sei nelle vicinanze. Il dispositivo bluetooth DAVIDE che cos'è? Casomai è tra le periferiche associate (col pairing) del primo dispositivo?
Insistendo col primo dispositivo non ti appaiono mai i device QUxxx?

Citazione
Nel secondo caso trovo più dispositivi e soprattutto quelli che servono a me che sono i "QUxxx", in questo modo non capisco da cosa sia dovuto il problema perchè non è sistematico. Se vado in impostazioni -> bluetooth viene trovato in un attimo da tutti e due i dispositivi.

Da quello che dici mi viene da pensare ad alcune versioni Android brandizzate che, se non ricordo male, mi sembra aver visto sui Motorola; hanno un menù nella sicurezza per indicare quali siano i dispositivi Bluetooth "sicuri" escludendo gli altri, mentre dal menù del bluetooth è possibile vedere tutti i dispositivi.

Citazione
Questo è il modulo bluetooth a cui devo connettermi: http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00048919.pdf

Anche io utilizzo moduli BT della ST, nel mio caso con il 4.0 (BLE). Ma il modulo di per se non dice molto, è il fw che sta dietro ed invia i comandi AT che ne discrimina il funzionamento ... :)

Citazione
Secondo te quale potrebbe essere il problema?

Da quello che mi hai raccontato sembrerebbe essere qualcosa legato alla configurazione del bluetooth sul dispositivo (smartphone) che utilizzi. Se in "Impostazioni/bluetooth" lo vedi saresti obbligato a vedere la stessa cosa anche dalla tua App. Non avendo sotto mano i dispositivi ed il caso concreto però devo andare per supposizioni ... ;)

Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Problema con bluetooth
« Risposta #8 il: 08 Maggio 2015, 11:14:33 CEST »
0
Citazione
Il primo Logcat è fatto con uno smartphone ed il secondo con un altro smartphone? Potresti indicarmi quali?
Escludo che ci sia un problema di segnale bluetooth, i valori sono tutti mediamente alti, quindi hai un segnale forte, sei nelle vicinanze. Il dispositivo bluetooth DAVIDE che cos'è? Casomai è tra le periferiche associate (col pairing) del primo dispositivo?
Insistendo col primo dispositivo non ti appaiono mai i device QUxxx?

Allora il primo logcat è fatto con un Samsung Tab 4 mentre il secondo è fatto con un TAB 493 della Majestic. Nel primo logcat DAVIDE è il bluetooth di un PC e NON è in pairing. Il problema è proprio quello: ci sono dei momenti in cui trova quello che voglio (QUxxx) e altri in cui non trova proprio nulla! Ho visto che a volte il TAB 493 impiega quasi un minuto per finire il discovering.

Per il lato firmware la parte di "discoverable" non è stata toccata e quindi parte di default visibile per 10ms ogni 1,5 secondi.

Curiosità: come ti trovi con il 4.0 della ST? In realtà volevo passare al BLE.

Grazie :)

Offline wlf

  • Utente normale
  • ***
  • Post: 315
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Problema con bluetooth
« Risposta #9 il: 08 Maggio 2015, 12:31:57 CEST »
0
Allora il primo logcat è fatto con un Samsung Tab 4 mentre il secondo è fatto con un TAB 493 della Majestic. Nel primo logcat DAVIDE è il bluetooth di un PC e NON è in pairing. Il problema è proprio quello: ci sono dei momenti in cui trova quello che voglio (QUxxx) e altri in cui non trova proprio nulla! Ho visto che a volte il TAB 493 impiega quasi un minuto per finire il discovering.

Ahi! :)
Potresti provarmi la stessa App su uno o più smartphone?
I PC rompono parecchio con il bluetooth (nel tuo caso DAVIDE); ho trovato tutta una serie di problematiche, la più bella è quella con alcuni notebook della DELL. :)
Il fatto che il TAB 493 che a volte impieghi quasi un minuto non è per nulla normale; se leggi la documentazione Google dice esplicitamente che ci mette "circa 12 secondi". Possono differire, ma non diventare 5 volte il normale!  :-o
Hai verificato anche da impostazioni/bluetooth comportamenti altalenanti? Oppure tutte le volte ti trova sempre tutte le periferiche bluetooh? Togli casomai tutte le associazioni prima di fare le prove.
I Tab hanno il wifi acceso? Prova a controllare se con il wifi spento migliorano le cose.
Io per ovviare al problema che non sempre la discover trova tutti i dispositivi ho messo un pulsante per far partire nuovamente la discover. Altrimenti in qualche modo dovresti ottenere il mac-address del dispositivo BT (memorizzandolo nell'App, post con servizio REST, etc).
La modifica che ti ho fatto fare mettendola ricorsiva, a mio avviso, è da togliere.

I Tab non li ho testati approfonditamente per quanto riguarda il bluetooth, ma a suo tempo mi avevano dato delle noie; suppongo che abbiano un hw scarso per quanto riguarda il BT oppure che il wifi vada in conflitto impattando negativamente sul funzionamento.

Citazione
Curiosità: come ti trovi con il 4.0 della ST? In realtà volevo passare al BLE.

Per il tipo di utilizzo che ne devo fare io non particolarmente bene; è stata una scelta obbligata (dispositivi Apple) ma con Android lo stiamo utilizzando ancora come BT 2.1.

Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Problema con bluetooth
« Risposta #10 il: 08 Maggio 2015, 12:47:29 CEST »
0
Mi sembra di notare che con il Wi-fi spento le cose migliorino anche se non capisco se è una cosa positiva o negativa  :-P

Mi sembra di notare che il problema riguardi più i tablet che gli smartphone anche se dovrei fare ancora delle prove. Anch'io ho pensato di mettere un pulsante per fare nuovamente il discovery.

Grazie mille per tutti gli aiuti! :)

Citazione
Per il tipo di utilizzo che ne devo fare io non particolarmente bene; è stata una scelta obbligata (dispositivi Apple) ma con Android lo stiamo utilizzando ancora come BT 2.1

E' così problematico passare con Android al 4.0?

Offline wlf

  • Utente normale
  • ***
  • Post: 315
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Problema con bluetooth
« Risposta #11 il: 08 Maggio 2015, 15:27:38 CEST »
0
Mi sembra di notare che con il Wi-fi spento le cose migliorino anche se non capisco se è una cosa positiva o negativa  :-P

Se guardi il range di frequenze del Wifi e del bluetooth noterai che entrambe operano attorno ai  2.4GHz; a seconda dell'hw le antenne potrebbero essere poste in modo da interferire una con l'altra ...
Dipende se hai la necessità di utilizzare la rete Wifi mentre fai la discover del BT; nel caso che hai bisogno di una connessione di rete e non puoi sfruttare il 3G è una cosa negativa. Se invece puoi tranquillamente disabilitare il wifi la cosa diventa più gestibile.
Comunque sia questo comportamento è indice di hw progettato male; anche Samsung non è immune a queste pestate! ;)

Citazione
Mi sembra di notare che il problema riguardi più i tablet che gli smartphone anche se dovrei fare ancora delle prove. Anch'io ho pensato di mettere un pulsante per fare nuovamente il discovery.

Gli smartphone "normalmente" sono progettati con più senno; le varie antenne, wifi, GSM, 3G, bluetooth, NFC, GPS, vengono poste con più cura in modo da non ostacolarsi una con l'altra. Viene dato per scontato che possano funzionare contemporaneamente, mentre sui tablet sembra che diano per scontato che si usi una funzionalità alla volta. :(
Io metterei il pulsante per rifare la discovery; eventualmente, fatti un salvataggio dei dispositivi preferiti già scoperti sulle sharedPreferences in modo da non dover rifare la discovery tutte le volte. Una volta scoperto avendolo tra i preferiti puoi connetterlo subito. In quest'ultimo caso dovrai gestirti però il caso che tenti di contattare un dispositivo non presente e/o spento.

Citazione
E' così problematico passare con Android al 4.0?

L'approccio è completamente diverso; se hai già del codice scritto per la 2.1 devi praticamente riscrivere tutto. Ma si entra in una palude di pro-contro:

1) Il BLE non è compatibile con le versioni "vecchie" di Android; già con Jelly Bean avresti dei problemi. Se la tua App gira solo su Lollipop o KitKat bene, altrimenti dovresti scrivere due sezioni diverse a seconda dell'API level.
2) Nel tuo caso utilizzi l'SPP; questo protocollo è antitetico al BLE. Per sfruttare realmente il BLE dovresti cambiare protocollo.

Per questi motivi è problematico, dipende sempre se il gioco vale la candela .... ;)

Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Problema con bluetooth
« Risposta #12 il: 08 Maggio 2015, 17:29:59 CEST »
0
Quindi vuoi dirmi che il mio dispositivo bluetooth che è di tipo 3.0 sta in realtà girando a 2.1?

Offline wlf

  • Utente normale
  • ***
  • Post: 315
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Problema con bluetooth
« Risposta #13 il: 08 Maggio 2015, 18:10:55 CEST »
0
Quindi vuoi dirmi che il mio dispositivo bluetooth che è di tipo 3.0 sta in realtà girando a 2.1?

Ni; le differenze a livello di programmazione le hai tra il bluetooth tradizionale e il BLE. Differenze tra 2.1 e 3.0 vengono gestite dall'hw in modo trasparente. Quindi per te fa poca differenza ...


Offline davix10

  • Utente normale
  • ***
  • Post: 155
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg G4
  • Play Store ID:
    davix10
  • Sistema operativo:
    Windows 10
Re:Problema con bluetooth
« Risposta #14 il: 08 Maggio 2015, 18:18:46 CEST »
0
Capito :) ma si notano grandi differenze passando dal 3.0 al 4.0?