2016-04-16 10 views
8

मैं ब्लूटूथ ली थर्मामीटर से कनेक्ट करने का प्रयास कर रहा हूं। डिवाइस से कनेक्ट करना अच्छा काम कर रहा है। मुझे लटकने वाला एकमात्र हिस्सा गैटकॉलबैक है और यह कैरेक्टरिस्टिक चेंज/रीड ऑन है। 'setNotification' और वर्णनकर्ता 'setValue' और 'writeDescriptor' सभी वापस आते हैं। ऑन-कैरेक्टरिस्टिक चेंज को कभी भी मूल्य वापस करने के लिए बुलाया नहीं जाता है।एंड्रॉइड बीएलई ऑन कैरेक्टरिस्टिक रीड एंड ऑन कैरेक्टरिस्टिक चेंज कभी नहीं

मैंने बीएलई स्कैनर नामक Play Store से एक बहुत ही आसान छोटा प्रोग्राम इस्तेमाल किया ताकि मुझे डिवाइस और इसकी सेवाओं और विशेषताओं के बारे में मुझे और जानकारी दी जा सके।

enter image description here

यही कारण है कि मैं बस हार्ड कोडित सेवा 2, विशेषता 0. मैं सिर्फ यह पता लगाने की वजह है कि मैं writeDescriptor के बाद, मैं कभी नहीं देखना नहीं कर पा रहे कुछ भी वापस आना है। दिलचस्प बात यह है कि, मैं कुछ अन्य लक्षणों (एक तापमान अंतराल होने का उपयोग कर सकता हूं) और मुझे एक प्रतिक्रिया प्राप्त होती है (हालांकि डेटा खराब हो जाता है।)

इसके अलावा, जिज्ञासा से, इस पर 2 वर्णनकर्ता क्यों हैं विशेषता?

यह कोड मेरी मुख्य गतिविधि विधि में निहित है। यकीन नहीं है कि इससे कोई फर्क पड़ता है। मैंने यहां कोई भाग्य के साथ पोस्ट किए गए कई तरीकों को देखा और कोशिश की है।

private final BluetoothGattCallback gattCallback = new BluetoothGattCallback() 
{ 
    @Override 
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) 
    { ... } 

    @Override 
    public void onServicesDiscovered(BluetoothGatt gatt, int status) 
    { 
     mGatt = gatt; 

     List<BluetoothGattService> services = mGatt.getServices(); 
     Log.i("onServicesDiscovered", services.toString()); 

     BluetoothGattCharacteristic characteristic = services.get(2).getCharacteristics().get(0); 

     mGatt.setCharacteristicNotification(characteristic, true); 

     BluetoothGattDescriptor descriptor = characteristic.getDescriptor(UUID.fromString(CLIENT_CHARACTERISTIC_CONFIG)); 
     descriptor.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE); 

     mGatt.writeDescriptor(descriptor); 

    }    

    @Override 
    public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) 
    { ... } 

    @Override 
    public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) 
    { ... } 
}; 

अद्यतन: मैं onDescriptorWrite विधि की जाँच करें और कुछ जानकारी के लिए लॉग इन करने का फैसला किया।

@Override    
public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) 
    { 
     Log.i("descriptorWRITE", Integer.toString(status)); 
    } 

दिलचस्प बात यह है कि यहां स्थिति 13 है जो लौटा रहा है 'ए लिखने आपरेशन विशेषता की अधिकतम सीमा पार' है।

मैं इसे और देख रहा हूं।

उत्तर

4

मुझे यहां समस्या मिली। मैं मान रहा था कि थर्मामीटर मानक बीएलई सेवा और विशेषता सेटअप का उपयोग कर रहा था। यह नहीं। उन्होंने अपनी खुद की कस्टम विशेषता बनाई। एक बार जब मैंने उस विशेषता पर स्विच किया, तो 'बदली' विधि ने फायरिंग शुरू कर दी।

0

मुझे लगता है कि आप mGatt.readCharacteristic(characteristic) गुम हैं।

जब आप इसे कॉल करते हैं, तो यह पढ़ने के लिए प्रतीक्षा की जाएगी और onCharacteristicRead पर कॉल करें।

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