2016-04-15 7 views
6

पर काम नहीं कर रहे लक्षण पढ़ें मैं लगातार एक बीएलई डिवाइस से विशेषताओं को पढ़ने की कोशिश कर रहा हूं।एंड्रॉइड ब्लूटूथ LE - सैमसंग

मैं अपने सेवा कक्षा में एक Runnable बनाया है:

private class BackgroundRunnableForRead implements Runnable 
    { 


     private volatile boolean isRunning = true ; 
     @Override 
     public void run() { 
      try { 
      BluetoothLeService.this.backgroundRunID = Thread.currentThread().getId(); 
      while(isRunning) { 

        List<BluetoothGattService> gattServices = BluetoothLeService.this.getSupportedGattServices(); 

        if (gattServices != null && gattServices.size() > 0) { 
         BluetoothGattCharacteristic characteristic = getCharacteristic(gattServices); 

         if (characteristic != null && (characteristic.getProperties() & 2) > 0) { 
          BluetoothLeService.this.readCharacteristic(characteristic); 
         } 
        } 
       } 
      } 
      catch(Exception e) 
      { 
       isRunning= false; 
       e.printStackTrace(); 
      } 

     } 

     public void kill() 
     { 
      this.isRunning = false; 
     } 
    } 

और सेवाओं की सफल खोज पर मैं बोल रहा हूँ:

public void startReadingCharacteristics() 
    { 
     System.out.println("BluetoothLeService.startReadingCharacteristics"); 
     this.mBackgroundRunnable = new BackgroundRunnableForRead(); 
     mReadThread = new Thread(mBackgroundRunnable); 
     mReadThread.start(); 

    } 

और यह characterics पर मेरी कॉलबैक पढ़ा है -

public void onCharacteristicRead(BluetoothGatt gatt, 
             BluetoothGattCharacteristic characteristic, 
             int status) { 
      System.out.println("BluetoothLeService.onCharacteristicRead" + status); 
      if (status == BluetoothGatt.GATT_SUCCESS) { 
       broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic); 
      } 

     } 

एप्लिकेशन नेक्सस 5, नेक्सस 4 और मोटोरोला जी पर ठीक काम करता है।

जब मैं सैमसंग एस 6 पर यह कोड चला रहा हूं तो यह काम नहीं करता है, onCharacteristicRead() नहीं कहा जाता है।

मैंने पढ़ा है कि readCharacteristics() पर अनुक्रमिक कॉल करने से समस्याएं उत्पन्न हो सकती हैं क्योंकि यह निष्पादित करने के लिए आवश्यक है।

+0

ओएस संस्करण क्या है? –

+0

ओएस संस्करण - एंड्रॉइड 5.1.1। – Anukool

+0

कृपया अपना कोड –

उत्तर

0

एक समय में केवल एक गैट कमांड निष्पादित करने की अनुशंसा की जाती है क्योंकि commands are not stacked। इसलिए आपको किसी प्रकार की तंत्र को कार्यान्वित करना होगा कि अगले पढ़ने के लिए आपको कॉलबैक पढ़ने के बाद अगला पठन कहा जाता है।

ध्यान रखें कि गैट कॉलबैक अलग-अलग धागे से आ सकते हैं, लेकिन यदि आप कॉलबैक में पढ़े गए मान को सहेजते हैं और फिर वहां से अगले पढ़ने को ट्रिगर करते हैं तो यह कोई समस्या नहीं होनी चाहिए।

+0

प्रारूपित करें, मैंने केवल विशेषताओं के पढ़ने को शुरू करने का प्रयास किया जब ऑन-कैरेक्टरिस्ट रीड कॉलबैक ट्रिगर किया गया। हालांकि काम नहीं कर रहा है, क्या आपको लगता है कि अगर मैं कहीं कुछ गलत कर रहा हूं? – Anukool

+0

अच्छी तरह से, यदि आप पहले वर्णित कमांड कमांड निष्पादित नहीं करते हैं तो 'ऑन-कैरेक्टरिस्टिक रीड' कॉलबैक क्यों ट्रिगर किया जाना चाहिए? – JPS

+0

सबसे पहले मैं सेवाओं की खोज के तुरंत बाद एक विशेष विशेषताओं को निष्पादित कर रहा हूं, और फिर पहली बार onacteracteristicsRead कहा जाता है। और उसके बाद मैं ऑन-कैरेक्टरिक्स में पढ़ने की विशेषताओं को कॉल करता हूं, यह काम नहीं करता है। – Anukool

संबंधित मुद्दे