2011-02-03 20 views
6

पर एंड्रॉइड आरएफसीओएमएम सॉकेट मैं एक एंड्रॉइड एप्लिकेशन लिख रहा हूं जो एक हार्डवेयर डिवाइस से बात करने के लिए है जो पूरी तरह से मेरे नियंत्रण से बाहर है।फिक्स्ड चैनल

मेरा एप्लिकेशन listenUsingRfcommWithServiceRecord और UUID 00001101-0000-1000-8000-00805F9B34FB का उपयोग करके एक सुनवाई सॉकेट बनाता है। इसके बाद रिमोट डिवाइस को कनेक्ट करने के लिए प्रतीक्षा करने के लिए उस सॉकेट पर स्वीकार() को कॉल किया जाता है, लेकिन यह कभी नहीं करता है।

मैंने हार्डवेयर डिवाइस के निर्माताओं से बात की है, और वे कहते हैं कि उनका डिवाइस रिमोट डिवाइस पर "बस चैनल 1 से कनेक्ट होगा"। यानी यह सही चैनल नंबर खोजने के लिए एसडीपी खोज नहीं करता है। वे इसे बदलने से इंकार करते हैं (भले ही यह गलत है)

मेरा प्रश्न है कि एंड्रॉइड को एक निश्चित आरएफसीओएमएम चैनल नंबर का उपयोग करने के लिए मजबूर करने के कोई तरीके हैं? हो सकता है कि प्रतिबिंब का उपयोग करना, क्लाइंट से कनेक्ट करते समय createRfcommSocket को सीधे कॉल करने की चाल की तरह।

उत्तर

1

वे एपीआई मौजूद हैं, लेकिन समर्थित नहीं हैं। यदि आप अभी भी रुचि रखते हैं, तो Android 1.5 backport of android.bluetooth के स्रोत के लिए स्रोत कोड देखें।

चेतावनी दी जानी चाहिए कि, असमर्थित एपीआई के रूप में उन्हें किसी भी भावी रिलीज में हटाया जा सकता है।

+0

उत्तर के लिए धन्यवाद। – didster

1

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

अधिकतम 30 चैनल हैं ताकि आप यूयूआईडी के साथ 30 कनेक्शन (या कम) खोल सकें। अब, spdtool का उपयोग करके आप चाहते हैं कि चैनल के सॉकेट कनेक्शन के UUID खोजें। उस कनेक्शन को बंद करो।

अब आपके मामले में 1 चैनल, एकमात्र चैनल उपलब्ध होगा। जिस तरह से आप चाहते हैं उससे कनेक्ट करें। एक बार कनेक्शन स्थापित हो जाने के बाद, अन्य सभी कनेक्शन बंद करें।

मुझे पता है कि यह हैकी नरक के रूप में है, लेकिन यह मेरे उपयोग के मामले में काम करता है!

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