6

मैं बीएलई के साथ एक एंड्रॉइड एप्लिकेशन विकसित कर रहा हूं। इस एप्लिकेशन की आवश्यकता विभिन्न इनपुट के साथ एक विशिष्ट हार्डवेयर में वोल्टेज भिन्नता को अद्यतन करना है। तो मैं इस आवेदन में बीएलई अधिसूचना एपीआई सक्षम करता हूं। यह नवीनतम हार्डवेयर वोल्टेज के साथ समय की अवधि में आवेदन को सूचित करेगा।एंड्रॉइड बीएलई: विशेषता प्रकार की पहचान करें?

कार्यान्वयन

mBluetoothGatt.setCharacteristicNotification(characteristic, enabled); 
BluetoothGattDescriptor des = characteristic.getDescriptors(); 
des.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);   
//Set the value of the descriptor to enable notification 
        mBluetoothGatt.writeDescriptor(des); 

मैं गैट कॉलबैक विधि

 @Override 
     public void onCharacteristicChanged(BluetoothGatt Gatt, BluetoothGattCharacteristic characteristic) { 
        Log.w(TAG, "**ACTION_DATA_AVAILABLE**" + characteristic.getUuid()); 
//Indication or notification was received 
        broadcastUpdate(BLEConstants.ACTION_DATA_AVAILABLE, characteristic);      
//Go broadcast an intent with the characteristic data 
       } 

में अधिसूचना मूल्यों में अधिसूचना मिल रहा है लेकिन मेरी समस्या है, मैं एक ही गैट में भी सामान्य प्रतिक्रिया हो रही है कॉलबैक विधि। मैं यूआई में एक विशिष्ट तरीके के रूप में अधिसूचना अद्यतन करना चाहता हूँ। तो मुझे सामान्य प्रतिक्रिया और अधिसूचना को अलग करने की जरूरत है। क्या ऐसा करने का कोई तरीका है? या किसी विशेष संदेश की पहचान करने का कोई विकल्प अधिसूचित है?

उत्तर

3

सामान्य तौर पर, हम (हार्डवेयर की ओर) एक विशेषता दोनों लिखें के साथ बना सकते हैं और गुण सूचित, ताकि हम वास्तविक समय डेटा प्राप्त करने के लिए सूचित सक्षम पढ़ सकते हैं जब भी हम चाहते हैं या पूरी तरह से।

यदि आपके पास हार्डवेयर फर्मवेयर तक पहुंच है और विशेषताओं को जोड़ सकते हैं, तो वोल्टेज विशेषता को अलग करना और प्रतिक्रिया एक को अच्छा लगेगा। इस प्रकार आप onCharacteristicChanged तर्क पर परीक्षण कर सकते हैं:

int propertiesFlags = characteristic.getUuid(); 

एक और अच्छा तरीका यह करने के लिए, और कहा कि क्या मैं आमतौर पर करते हैं, एक विशेषता का उपयोग कर रहा है, लेकिन डेटा अंतराल बताए। अपने अनुप्रयोग और हार्डवेयर के बीच सम्मेलन के कुछ प्रकार:

@Override 
public void onCharacteristicChanged(BluetoothGatt Gatt, BluetoothGattCharacteristic characteristic) { 
    byte[] data = characteristic.getValue(); 
    if(data[1] < SOME_PREDIFINDED_VALUE){ 
     //it's a real-time data update 
    }else{ 
     //it's a response to some data you sent. 
    } 

} 

अन्यथा, प्रतिक्रिया केवल एक विशिष्ट बदलाव हार्डवेयर वोल्टेज की एक नई मूल्य अर्थ हो जाएगा।

+0

ठीक है। आपके अद्यतन के लिए धन्यवाद। वैसे भी, पहला विकल्प मेरे मामले में लागू नहीं है। क्योंकि मैं डेटा प्राप्त करने वाले अनुभाग में एक जटिल धारावाहिक संचार प्रोटोकॉल का प्रबंधन कर रहा हूं। मैं पहले विकल्प का प्रयास करूंगा और आपको अपडेट करूँगा। – Nithinjith

+0

इस मामले में, मैं दो यूयूआईडी एमएलडीपी_DATA_PRIVATE_CHAR = "00035b03-58e6-07dd-021a-08123a000301" का उपयोग कर रहा हूं; CHARACTERISTIC_NOTIFICATION_CONFIG = "00002902-0000-1000-8000-00805f9b34fb"; आपकी समझ के आधार पर, हम सामान्य संदेश के लिए पहला और नोटफी संदेश के लिए दूसरा सेट कर सकते हैं। क्या मैं सही हूँ? – Nithinjith

+0

हां, यदि आप ऐसा करने के लिए फर्मवेयर कॉन्फ़िगर करते हैं। फिर आप अधिसूचना (रीयल-टाइम डेटा स्ट्रीम) से अलग उत्तरों (कुछ लिखने वाले charac द्वारा ट्रिगर) अलग करने में सक्षम होंगे। – neogineer

1

नहीं, अगर आपको फर्मवेयर बदलने की संभावना नहीं है। आपके स्पष्टीकरण के मुताबिक ऐसा लगता है कि अगर आप मूल्य के लिए पूछते हैं या मूल्य बदल जाता है तो नोटिफ़िक विशेषता प्रकार कोई मीटर ट्रिगर नहीं होता है।

यदि ऐसा है तो

, एक ही रास्ता मैं के रूप में समाधान पीछा कर रहा है कल्पना कर सकते हैं।

  1. आपने मूल्य के लिए कहा है। आपको ध्वज सेट करना होगा और आपको यह समझना होगा कि ध्वज सेट होने पर रिपोर्ट किए गए सभी मान वे मान हैं जिन्हें आप पूछ रहे हैं।
  2. आप मूल्य के लिए नहीं पूछा है। अधिसूचना के रूप में यह विचार करें।

उम्मीद है कि यह मदद करता है।

अद्यतन:

:

यह है कि आप, RN4020 MLDP निजी सेवा के लिए दस्तावेज़ उजागर नहीं किया है जो प्रयोग कर रहे हैं this

के अनुसार सबसे अच्छा मैंने पाया सकता है निम्न था लगता है

// private static final String MLDP_PRIVATE_SERVICE = "00035b03-58e6-07dd-021a-08123a000300"; //Private service for Microchip MLDP 
// private static final String MLDP_DATA_PRIVATE_CHAR = "00035b03-58e6-07dd-021a-08123a000301"; //Characteristic for MLDP Data, properties - notify, write 
// private static final String MLDP_CONTROL_PRIVATE_CHAR = "00035b03-58e6-07dd-021a-08123a0003ff"; //Characteristic for MLDP Control, properties - read, write 
// private static final String CHARACTERISTIC_NOTIFICATION_CONFIG = "00002902-0000-1000-8000-00805f9b34fb"; //Special UUID for descriptor needed to enable notifications 
here

Whi से

ch का मतलब है कि डेटा स्थानांतरित करने का एकमात्र तरीका

// private static final String MLDP_DATA_PRIVATE_CHAR = "00035b03-58e6-07dd-021a-08123a000301"; //Characteristic for MLDP Data, properties - notify, write 

और इस विशेषता में केवल नोटिफ़िक है, पढ़ा नहीं गया है। तो यदि आप इसका उपयोग कर रहे हैं, तो आप डिवाइस पक्ष पर अधिसूचना कॉलबैक से बच नहीं सकते हैं।

+0

ठीक है, आपके उत्तर के लिए धन्यवाद। तो आप कह रहे हैं कि अधिसूचना और सामान्य संदेश यूयूआईडी के साथ अलग नहीं हो सकता है? – Nithinjith

+1

यदि आप फर्मवेयर पक्ष तक पहुंच सकते हैं, तो, आप विशेषता बना सकते हैं जिसमें केवल संपत्ति पढ़ें, और दूसरा जिसने केवल संपत्ति को नोटिफ़िक किया है। गुणों को गठबंधन करना भी संभव है। उदाहरण के लिए, विशेषता में एक ही समय में रीड और राइट संपत्ति हो सकती है, जिसका आमतौर पर उपयोग किया जाता है। यह समझना जरूरी है कि फर्मवेयर पक्ष कैसे काम करता है, बीएलई सेवा द्वारा कौन सी विशेषताओं का खुलासा किया जाता है, और उनके गुण क्या हैं (पढ़ें, लिखें, बिना प्रतिक्रिया के लिखें, सूचित करें, इंगित करें ...)। –

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