2017-09-11 6 views
1

ich auf App arbeitete, die mit BLE device.I kommunizieren ist 20 Bytes leicht auf Eigenschaften schreiben kann, aber wenn es mehr als 20 Bytes ist ist es problem.I erstellen sindAntrag MTU arbeitet nicht in Nougat

mBluetoothGatt.requestMtu(512); mit

schreiben Eigenschaften nach dem Erfolg.

@Override 
        public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) { 
         super.onMtuChanged(gatt, mtu, status); 

         if (status == BluetoothGatt.GATT_SUCCESS) { 
          System.out.print("Mtu Granted"); 
//       this.supportedMTU = mtu; 
         } 
        } 

, die in Eibisch funktioniert gut und lolipop.But es nicht in Nougat (Samsung Galaxie s6) arbeitet.

+0

Irgendwelche spezifischen Fehler für nichts? – Piyush

+0

Nein, es gibt keinen spezifischen Fehler.Ich habe Erfolg in onMtuchanged, aber es ist nicht auf BLE-Gerät widerspiegeln. –

+0

In Naught OS gibt es einige Änderungen für die Bluetooth-Verbindung. Bitte überprüfen Sie Android-Entwickler offiziellen Websites – Piyush

Antwort

1

Ich hatte genau das gleiche Problem, also habe ich die mtu Anfrage in eine Schleife gestellt und es scheint nach 2 Versuchen regelmäßig zu funktionieren.

  new Thread(new Runnable() { 
       @Override 
       public void run() { 
        while (!mtuConfirmed) { 
         mBluetoothGatt.requestMtu(512); 
         mtuRequestCounter++; 
         try { 
          Thread.sleep(1000); 
         } catch (InterruptedException e) { 
          e.printStackTrace(); 
         } 
        } 
        Log.d(TAG, "MTU change reply received after " + mtuRequestCounter + " attempts"); 
       } 
      }).start(); 
+0

Alle Anfragen an ein BluetoothGatt-Objekt müssen serialisiert werden. Sie können mtu nicht anfordern, während Sie einen anderen ausstehenden Vorgang haben. – Emil

Verwandte Themen