Android: ब्लूटूथ UUIDs कैसे काम करते हैं?


81

मुझे समझ में नहीं आता कि एक ब्लूटूथ यूयूआईडी क्या दर्शाता है। क्या UUIDs प्रोटोकॉल को निरूपित करते हैं (जैसे RFCOMM )? यदि हां, तो क्योंcreateRfcommSocketToServiceRecord() विधियों को यूयूआईडी की आवश्यकता होती है, जब वे अपने नामों में सही rfcomm निर्दिष्ट करते हैं? क्यों ब्लूटूथचैट नमूना कोड में एक उचित रूप से मनमाना, हार्डकोड यूयूआईडी है?

मेरा प्रश्न यह उठता है, क्योंकि इस प्रश्न के अनुसार , मुझे 4.0 के बाद चलने वाले उपकरणों को एक शून्य सूचक अपवाद मिल रहा है, जो प्रतिबिंब का उपयोग करके (एक बाहरी, गैर-एंड्रॉइड डिवाइस पर) कनेक्ट करने का प्रयास करता है। हालाँकि, उस प्रश्न का हल मेरे लिए काम नहीं करता है।UUID muuid = device.getUuids()[0].getUuid();एक अपवाद उठाता है।

संपादित करें : मैंने इस उत्तर (उपयोग करके) के अनुसार सीरियल पोर्ट सेवा के लिए UUID को हार्डकोड करके उस समस्या को हल किया हैUUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); ) के ।

मैं आगे इस बात से हैरान हूं कि मुझे यूयूआईडी की आपूर्ति करने की आवश्यकता क्यों है क्योंकि एक असुरक्षित rfcomm सॉकेट बनाने के लिए उपयोग करना है createInsecureRfcommSocketToServiceRecord(),लेकिन प्रतिबिंब विधि का उपयोग नहीं करना है।

क्या कोई मुझे सीधा कर सकता है?


शैक्षणिक उद्देश्य को छोड़कर कभी भी ब्लूटूथ कनेक्शन का उपयोग नहीं किया जाता है, लेकिन मुझे पता है कि यूयूआईडी डिवाइस का पहचानकर्ता है, डिवाइस के पते जैसा कुछ है, और डिवाइस के लिए समान रहता है।
नोब डेब

@Creator: यह इस सवाल का खंडन करता है: stackoverflow.com/a/4963069/1286571
ForeverWintr

3
खैर, यह सब मैं ब्लूटूथ यूयूआईडी के बारे में जानता था, आप ब्लूटूथ प्रोटोकॉल और यूयूआईडी की बेहतर समझ के लिए इस पीडीएफ को पढ़ने की कोशिश कर सकते हैं - People.csail.mit.edu/rudolph/Teaching/Articles/PartnfBTBook.pdf
noob

प्रश्न: क्या इसका कोई परिणाम है जब एंड्रॉइड फोन रिमोट डिवाइस से यूयूआईडी का समर्थन नहीं कर रहा है। (UUID Android में सूचीबद्ध नहीं है ... getUuids ())?
ओरी

हे हे हे! मैं कुछ पूछना चाहता हूं, @ForeverWintr, क्या यह ठीक है यदि मैं अपने स्वयं के प्रारूप के साथ एक एकल यूयूआईडी को परिभाषित करता हूं और दो एंड्रॉइड डिवाइस में उपयोग किया जाता है? मेरा मतलब है, क्या वे एक दूसरे से संवाद कर सकते हैं?
गमरु

जवाबों:


7

ब्लूटूथ में, सभी वस्तुओं को यूयूआईडी द्वारा पहचाना जाता है। इनमें सेवाएं, विशेषताएं और कई अन्य चीजें शामिल हैं। ब्लूटूथ मानक वस्तुओं के लिए नियत संख्याओं का एक डेटाबेस रखता है, और विक्रेताओं के लिए उप-श्रेणियाँ प्रदान करता है (जो आरक्षण के लिए पर्याप्त भुगतान करता है)। आप इस सूची को यहाँ देख सकते हैं:

https://www.bluaxy.com/specifications/assigned-numbers/

यदि आप एक मानक सेवा (जैसे एक सीरियल पोर्ट, कीबोर्ड, हेडसेट, आदि) को लागू कर रहे हैं, तो आपको उस सेवा के मानक यूयूआईडी का उपयोग करना चाहिए - जो आपको उन उपकरणों के साथ इंटरऑपरेबल होने की अनुमति देगा जो आपने विकसित नहीं किए थे।

यदि आप एक कस्टम सेवा लागू कर रहे हैं, तो आपको अद्वितीय यूयूआईडी उत्पन्न करना चाहिए, यह सुनिश्चित करने के लिए कि असंगत तृतीय-पक्ष डिवाइस आपकी सेवा का उपयोग करने की कोशिश नहीं करते हैं यह सोचकर कि यह कुछ और है। सबसे आसान तरीका यादृच्छिक लोगों को उत्पन्न करना है और फिर अपने आवेदन में परिणाम को हार्ड-कोड करना है (और उपकरणों में उसी यूयूआईडी का उपयोग करें जो आपकी सेवा से जुड़े होंगे, निश्चित रूप से)।


मुझे ये UUID कहां से मिलते हैं और ये हमेशा तार क्यों होते हैं जो यादृच्छिक प्रतीत होते हैं?
ल्यूक क्रॉस

UUID RFC 4122 के अनुसार उत्पन्न होते हैं। चुनने के लिए पाँच अलग-अलग UUID संस्करण हैं। सबसे लोकप्रिय संस्करण 1 हैं (टाइमस्टैम्प और मैक पते के आधार पर) और संस्करण 4 (यादृच्छिक)। En.wikipedia.org/wiki/Universally_unique_identifier भी देखें । एक वेब पेज जो आपके लिए UUIDs उत्पन्न कर सकता है uuidgenerator.net है । यदि आप एक ब्लूटूथ एसआईजी सदस्य हैं, तो वे आपकी सदस्यता आईडी से बंधे यूयूआईडी बनाने के लिए एक एल्गोरिथ्म प्रदान करते हैं।
डेविड सी।

29

UUID का उपयोग विशिष्ट पहचान की जानकारी के लिए किया जाता है। यह ब्लूटूथ डिवाइस द्वारा प्रदान की गई एक विशेष सेवा की पहचान करता है। मानक एक मूल को परिभाषित करता है BASE_UUID: 00000000-0000-1000-8000-00805F9B34FB

हेल्थकेयर सेंसर जैसे उपकरण एक सेवा प्रदान कर सकते हैं, जो पूर्वनिर्धारित कोड के साथ पहले आठ अंकों को प्रतिस्थापित करता है। उदाहरण के लिए, RFCOMM कनेक्शन प्रदान करने वाला उपकरण उपयोग करता है शॉर्ट कोड: 0x0003

तो, एक एंड्रॉइड फोन एक डिवाइस से कनेक्ट हो सकता है और फिर सेवा डिस्कवरी प्रोटोकॉल (एसडीपी) का उपयोग करके यह पता लगा सकता है कि यह क्या सेवाएं प्रदान करता है (यूयूआईडी)।

कई मामलों में, आपको इन निश्चित यूयूआईडी का उपयोग करने की आवश्यकता नहीं है। उदाहरण के लिए, आपका चैट एप्लिकेशन बना रहा है, उदाहरण के लिए, एक एंड्रॉइड फोन दूसरे एंड्रॉइड फोन के साथ इंटरैक्ट करता है जो उसी एप्लिकेशन का उपयोग करता है और इसलिए वही यूयूआईडी।

तो, आप अपने आवेदन के लिए एक मनमाना यूयूआईडी सेट कर सकते हैं, उदाहरण के लिए, वेब पर कई यादृच्छिक यूयूआईडी जनरेटर में से एक ( उदाहरण के लिए )।


तो RFCOMM सेवा के लिए पूर्ण UUID है: 00000003-0000-1000-8000-00805F9B34FB?
गोजो कुदोर १६'१५ को

1
नोट: वे सेवा आईडी के संक्षिप्त रूप को सूचीबद्ध करते हैं जो 32 बिट है। आप इसे GUID के पहले 4 अंकों की जगह BT SIG के आधार UUID 00000000-0000-1000-8000-00805F9B34FB के साथ जोड़ दें। Ex। RFCOMM 0x0003 है, इसलिए RFCOMM सेवा के लिए UUID 00030000-0000-1000-8000-00805F9B34FB है
sam msft

22

यह आमतौर पर कुछ सामान्य सेवा (प्रोटोकॉल) का प्रतिनिधित्व करता है जो ब्लूटूथ डिवाइस का समर्थन करता है।

अपना स्वयं का rfcomm सर्वर (के साथ listenUsingRfcommWithServiceRecord) बनाते समय , आपको अपना स्वयं का UUID निर्दिष्ट करना चाहिए ताकि इससे जुड़ने वाले ग्राहक इसे पहचान सकें; यह createRfcommSocketToServiceRecordयूयूआईडी पैरामीटर की आवश्यकता के कारणों में से एक है।

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

यहाँ देखें


3
यह आमतौर पर करता है? यह कब नहीं है? मुझे समझ नहीं आ रहा है कि अगर मैं RCOMM सर्वर बना रहा हूं, तो मैं RFCOMM UUID का उपयोग नहीं करूंगा।
फॉरएवरविंटर

1
ठीक है, UUIDहै सार्वभौमिक पहचानकर्ता। RFCOMM ब्लूटूथ प्रोटोकॉल स्टैक पर सिर्फ एक परत है, और ब्लूटूथ विनिर्देश के अनुसार UUID को संबद्ध किया है; और एसडीपी द्वारा उपयोग किया जाता है, पूरी तरह से निश्चित नहीं है कि किसके लिए; लेकिन आप हमेशा कल्पना में इसके बारे में पढ़ सकते हैं। अब, यदि आप RFCOMM प्रोटोकॉल के शीर्ष पर एक सेवा बना रहे हैं, तो आपको एक UUID प्रदान करना होगा, क्योंकि यह SDP द्वारा आवश्यक है, अन्यथा आपकी सेवा की खोज नहीं की जाएगी।
nullpotent

3
यह वेब पर एक मिला। सब?? यूटी के लिए यूयूआईडी। sviluppomobile.blogspot.de/2012/11/…
ओररी

लिंक मृत है - क्या यह आम यूयूआईडी की सूची थी?
user1725145

7

यूयूआईडी इंटरनेट में नंबर पोर्ट करने की धारणा के समान है। हालाँकि, ब्लूटूथ और इंटरनेट के बीच का अंतर यह है कि, ब्लूटूथ में, पोर्ट संख्याओं को एसडीपी (सर्विस डिस्कवरी प्रोटोकॉल) सर्वर द्वारा रनटाइम के दौरान असाइन किया जाता है, जहां प्रत्येक यूयूआईडी को पोर्ट नंबर दिया जाता है। अन्य डिवाइस एसडीपी सर्वर से पूछेंगे, जो डिवाइस पर उपलब्ध सेवाओं के बारे में एक आरक्षित पोर्ट नंबर के तहत पंजीकृत है, और यह अलग-अलग यूयूआईडी के तहत पंजीकृत होने पर एक-दूसरे से अलग-अलग सेवाओं के साथ जवाब देगा।


4

UUID सिर्फ एक संख्या है। इसका कोई अर्थ नहीं है सिवाय इसके कि आप एंड्रॉइड ऐप के सर्वर साइड पर बनाएं। फिर क्लाइंट उसी UUID का उपयोग करके जोड़ता है।

उदाहरण के लिए, सर्वर साइड पर आप fb36491d-7c21-40ef-9f67-a63237b5beaea जैसी यादृच्छिक संख्या उत्पन्न करने के लिए पहले uuid = UUID.randomUUID () चला सकते हैं। फिर इस तरह से अपने श्रोता कार्यक्रम में उस हार्ड कोड को सहेजें और फिर:

 UUID uuid = UUID.fromString("fb36491d-7c21-40ef-9f67-a63237b5bbea"); 

आपका Android सर्वर प्रोग्राम इस तरह के UUID के साथ आने वाले अनुरोधों को सुनेगा:

    BluetoothServerSocket server = mBluetoothAdapter.listenUsingRfcommWithServiceRecord("anyName", uuid);

BluetoothSocket सॉकेट = server.accept ();


1

योग करने के लिए: UUidविशिष्ट अनुप्रयोगों की पहचान करने के लिए उपयोग किया जाता है। प्रत्येक एप्लिकेशन में एक अद्वितीय हैUUid

इसलिए, UUidप्रत्येक डिवाइस के लिए समान का उपयोग करें


0

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

ब्लूटूथ हवा पर डेटा भेजता है और पास के सभी डिवाइस इसे प्राप्त कर सकते हैं। मान लीजिए, कभी-कभी आपको ब्लूटूथ के माध्यम से कुछ महत्वपूर्ण फाइलें भेजनी होती हैं और सभी उपकरणों के पास इसे रेंज में एक्सेस कर सकते हैं। इसलिए जब आप अन्य उपकरणों के साथ जोड़ी बनाते हैं, तो वे फ़ाइलों को साझा करने से पहले बस यूयूआईडी नंबर और मैच साझा करते हैं। जब आप कोई भी फाइल भेजते हैं तो आपका डिवाइस उस फाइल को उपयुक्त डिवाइस UUID के साथ एन्क्रिप्ट करता है और नेटवर्क पर साझा करता है। अब रेंज के सभी ब्लूटूथ डिवाइस एन्क्रिप्ट फाइल तक पहुंच सकते हैं लेकिन उन्हें सही यूयूआईडी नंबर की आवश्यकता होती है। इसलिए केवल सही यूयूआईडी उपकरणों में फ़ाइल को एन्क्रिप्ट करने की सुविधा है और अन्य गलत यूयूआईडी के कारण को अस्वीकार कर देंगे।

संक्षेप में, आप किसी भी दो ब्लूटूथ डिवाइस के बीच फ़ाइलों को साझा करने के लिए एक गुप्त पासवर्ड के रूप में यूयूआईडी का उपयोग कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.