2015-02-13 12 views
12

Android'de BLE geliştiriyorum, BLE cihazına tarama yapabilir, bağlayabilir ve yazabilirim.Android'de BLE için ardışık Karakteristik hızlı ve kararlı yazma nasıl?

Ben Button tıkladığımda AsyncTask için BluetoothGatt ve characteristic geçmesine aşağıdaki işlevi diyoruz.

write_btn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     new WriteCharacteristic(mBluetoothGatt , HueCharacteristic).execute(); 
    } 
}); 

yazma karakteristiğinin kod aşağıdaki gibidir:

private class WriteCharacteristic extends AsyncTask<String, Void, String> { 

     public BluetoothGatt mGatt; 
     public BluetoothGattCharacteristic mCharacteristic; 

     public WriteCharacteristic(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic){ 
      mGatt = gatt; 
      mCharacteristic = characteristic; 
     } 

     @Override 
     protected String doInBackground(String... urls) { 
      mGatt.writeCharacteristic(mCharacteristic); 
      return null; 
     } 
    } 

Ama ardışık butonuna tıklayın çalışıyorum, o AndroidBLE cihaza her characteristic yazmadım görünüyor .

Düğmeyi arka arkaya 5 kez tıklarsam, 1 ~ 3 kez kaybeder. Sadece iki kez characteristicBLE cihazı'a yazar.

Soru:

Is there any better way to write characteristic consecutive and stable to BLE device for Android?

cevap

16

okuma/Android'in Bluetooth yığınında karakteristik sistemi yazmak çoklu işlemleri sıraya değil iyidir. Başka bir tane göndermeden önce işlemlerin tamamlanmasını beklemeniz gerekir. Buna ek olarak, kodunuz AsyncTask'u kullandığından, bazı aygıtlarda görevlerin paralel yürütülmesini sağlayabilirsiniz, böylece düğmeye tekrar tekrar basıldığında istekler bile serileştirilmez.

Çerçeveden kararlı sonuçlar almak için, bu istekleri kendiniz sıraya almanız ve bir sonraki komutu göndermeden önce tetiklemek için BluetoothGattCallbackonCharacteristicWrite()'u beklemeniz gerekir. Kodunuzun, GATT nesnesine olan tüm erişimi senkronize etmesi gerekir, böylece bir sonraki writeCharacteristic(), bir önceki istek için tamamlama geri çağrısı bitene kadar hiçbir zaman gelmez.

+2

Birkaç (2+) daha fazla BLE aygıtı ile iletişim kurduğumuzda, tüm yazma Karakteristikleri ve Tanımlayıcılarını aynı sıraya göre sıraya koymalı ve hangi gatt'lara yazılmaları gerektiğine veya ayrı sıralara sahip olabileceğine dair kayıt tutmalıyız, böylece gatt1.writeCharacteristics (. .) ve gatt2.writeCharacteristics (..) aynı anda yazılabilir mi? 10q – Ewoks

+1

@Devunwired Ewoks ile aynı soruya sahibim, biraz açıklayabilir misiniz? – Felix