2011-03-15 13 views
18

मैं आरएफकॉम सॉकेट को असुरक्षित रूप से जोड़ने का तरीका देख रहा हूं। मैं जिस तरह से समय से किया जा रहा क्या कर रहा है कि मैं क्या चाहते हैं के लिए नीचे दिए गएएंड्रॉइड में असुरक्षित आरएफसीओएमएम सॉकेट कैसे बनाएं?

Method m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] {int.class}); 
tmp = (BluetoothSocket) m.invoke(device, 1); 

यह उल्लेख किया है खोजने के लिए सक्षम था। यहां तक ​​कि here पर प्रलेखन का कहना है कि हमें असुरक्षित कनेक्शन के लिए createInsecureRfcommSocketToServiceRecord का उपयोग करने की आवश्यकता है। लेकिन ऐसी कोई विधि नहीं है। जैसा कि मैंने पाया है, एकमात्र तरीका ऊपर दिखाए गए प्रतिबिंब का उपयोग कर रहा था। और यहां तक ​​कि उस विधि में createInsecureRfcommSocket में पारित किया गया है और IsecureRfcommSocketToServiceRecord नहीं बना रहा है। मैं सिर्फ यह जानना चाहता था कि इस तरह से कितना विश्वसनीय है। यदि मैं विधि में createInsecureRfcommSocketToServiceRecord का उल्लेख करता हूं तो कनेक्शन कभी नहीं होता है।

उत्तर

29

createInsecureRfcommSocketToServiceRecord() एंड्रॉयड एपीआई स्तर 10 के साथ शुरू शामिल किया गया था देखा है, इसलिए प्रलेखन इसका इस्तेमाल करने के बाद से डॉक्स हमेशा API के नवीनतम संस्करण का पालन करें आप के लिए प्रोत्साहित करेंगे। यदि आप 10 से कम एपीआई को लक्षित कर रहे हैं (ए.के.ए. 2.3.3 या जिंजरब्रेड), तो वह विधि आपके लिए सार्वजनिक रूप से सुलभ नहीं है।

जिस विधि को आप प्रतिबिंब createInsecureRfcommSocket() के माध्यम से बुला रहे हैं, BluetoothDevice के अंदर एक निजी विधि है जो लगभग एंड्रॉइड 2.0 के बाद से मौजूद है। छिपी हुई विधियों को कॉल करने में समस्या यह है कि उन्हें सभी उपकरणों, या भविष्य में वहां होने की गारंटी नहीं है ... तो आप थोड़ा जुआ कर रहे हैं। मेरा अनुमान है कि आपकी विधि शायद अधिकांश 2.0+ उपकरणों पर अधिकतर समय काम करेगी, क्योंकि अपने सार्वजनिक चचेरे भाई createRfcommSocketToServiceRecord() को लागू करने के लिए आवश्यक सेवाओं को स्टैक परत पर समान ही है।

नीचे पंक्ति, यदि आप अपने ब्लूटूथ कार्यान्वयन के साथ सार्वभौमिक संगतता की गारंटी चाहते हैं, तो आपको अपने आवेदन के साथ 2.3.3 (एपीआई स्तर 10) को लक्षित करना होगा। असुरक्षित आरएफसीओएमएम के लिए अब एक सार्वजनिक एपीआई के संपर्क में आने के साथ, यह कहना मुश्किल है कि अंतर्निहित निजी कार्यान्वयन को बदलने के लिए यह कम या ज्यादा संभावना है या नहीं।

+0

मुझे सही दिशा में इंगित करने के लिए बहुत बहुत धन्यवाद। यदि वह एपीआई केवल एपीआई स्तर 10 के बाद उपलब्ध है तो मैं एंड्रॉइड 2.1 – sunil

+3

एटीएम के साथ विकास कर रहा हूं, तो मैं असुरक्षित रूप से डिवाइस से कैसे कनेक्ट करूं, आपको सबसे अच्छा समझौता मिला है। बस ध्यान रखें कि प्रतिबिंब समाधान बाद के संस्करणों में जा सकता है ताकि आप डिवाइस पर संस्करण को 'Build.VERSION' के साथ जांचने के लिए अपना कोड लिखना चाहें और 2.3 और बाद के लिए सार्वजनिक API का उपयोग कर सकें।इसके लिए आपको अपने लक्ष्य API स्तर को 10 तक बढ़ाने की आवश्यकता होगी, लेकिन अपना न्यूनतम API स्तर 5 (या 7) पर छोड़ दें ताकि यह अभी भी 2.1 या 2.2 चल रहे पुराने डिवाइस पर चल सके। उम्मीद है की वो मदद करदे! – Devunwired

+0

@Wireless, लेकिन क्या यह एपीआई 7 में createInsecureRfcommSocketToServiceRecord() विधि के साथ काम करेगा? –

0
+0

@ श्री डेनिस मैथ्यूज, मुझे आपको इस लिंक पर एक नज़र डालने की आवश्यकता है –

+0

http://stackoverflow.com/questions/6872451/android-bluetooth-connection-issue –

5

इस पोस्ट में 30 मार्च 2011 से पहले उत्तर दिए गए अधिकांश उत्तर यहां दिए गए हैं।

जबकि मेरे एप्लिकेशन में समान समस्या का समाधान की तलाश में, मैं यह जो अभी भी इतना

http://mobisocial.stanford.edu/news/2011/03/bluetooth-reflection-and-legacy-nfc/ पर इस समस्या समाधान के लिए देख रहे हैं उन सभी में मदद मिलेगी इस ब्लॉग 30 मार्च को

पर लिखा पाया है

समाधान अब बहुत आसान हो गया है। बस अपनी परियोजना में InsecureBluetooth.java शामिल करें और BluetoothChatService.java में 2 लाइनें बदलें।

tmp = InsecureBluetooth.listenUsingRfcommWithServiceRecord(mAdapter, NAME, MY_UUID, true); 

और

tmp = InsecureBluetooth.createRfcommSocketToServiceRecord(device, MY_UUID, true); 

Thats यह!

+4

लिंक 404 है – Rafay

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