2012-11-30 6 views
9

मेरे पास एक प्रोजेक्ट है जो ब्लूटूथ पर किसी डिवाइस से कनेक्ट होता है। यह काफी भरोसेमंद काम करता था, लेकिन अब यह हर बार BluetoothSocket.connect() कॉल विफल रहता है। (ठीक है, मुझे इसे 4 घंटे की अवधि में हजारों प्रयासों के दौरान एक बार कनेक्ट करने के लिए मिला।) अधिकांश कोड को BluetoothSocket डिवाइस प्राप्त करने में सामान्य संशोधन के अपवाद के साथ, एपीआई में मानक नमूना चैट कोड से लिया गया है। खुद:BluetoothSocket.connect() फेंकना अपवाद "पढ़ा विफल"

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

यहाँ ब्याज की विधि है, जो एक बार एक BluetoothSocket चलाने हो जाता है प्राप्त किया जाता है है: (प्रिंट किए गए अपवाद जबकि connect() बुला पकड़ा है)

public void run() { 
    setName("ConnectThread" + mSocketType); 

    // Always cancel discovery because it will slow down a connection 
    mAdapter.cancelDiscovery(); 

    // Make a connection to the BluetoothSocket 
    try { 
    mmSocket.connect(); 
    } catch (Exception e) { 
    Log.e(TAG, "Connection to " + mmDevice.getName() + " at " 
       + mmDevice.getAddress() + " failed:" + e.getMessage()); 
    // Close the socket 
    try { 
     mmSocket.close(); 
    } catch (Exception e2) { 
     Log.e(TAG, "unable to close() " + mSocketType 
       + " socket during connection failure", e2); 
    } 
    connectionFailed(e.getMessage()); 
    return; 
    } 

    // Reset the ConnectThread because we're done 
    synchronized (BluetoothChatService.this) { 
    mConnectThread = null; 
    } 

     // Start the connected thread 
    connected(mmSocket, mmDevice, mSocketType); 
} 

प्रासंगिक लॉग प्रविष्टि यह है:

11-30 10: 23: 51.685: ई/ब्लूटूथकैट सेवा (2870): पर कनेक्शन ZYNO-700091 00: 06: 66: 42: 8E: 01 विफल: पढ़ा गया असफल, सॉकेट बंद हो गया, पढ़ना जारी रखें: -1

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

मैं source code में देखा अपवाद फेंक। मुद्दा यह प्रतीत होता है कि अंतर्निहित InputStream में कोई डेटा नहीं है। बेशक, यह वास्तव में एक जवाब नहीं है, बस इसके प्रति एक कदम है। स्ट्रीम में कोई डेटा क्यों नहीं होगा?

मैं संभावित मुद्दे के बारे में खुले दिमाग रखने की कोशिश कर रहा हूं। क्या मुझे BluetoothSocket ठीक से मिल रहा है? तथ्य यह है कि यह एक बार एक अंतःविषय मुद्दा था और अब लगभग स्थिर है मुझे मल्टीथ्रेडिंग पर संदेह है, लेकिन यह सी ++ की तुलना में जावा में अपेक्षाकृत सरल विषय है - यदि आप जानते हैं कि आप क्या कर रहे हैं तो इसे खराब करना मुश्किल है। इसके अलावा, इस कोड का अधिकांश हिस्सा (विशेष रूप से, धागे को सिंक्रनाइज़ करने से संबंधित भागों) सीधे नमूना कोड से बाहर है।

दूसरे छोर पर डिवाइस एक एम्बेडेड ब्लूटूथ डिवाइस है, इसलिए वहाँ उस छोर से समस्या को दूर करने की उम्मीद नहीं है।

अद्यतन ===========================

यह मेरे लिए हुआ है कि यह (एक OS अपग्रेड के कारण हो सकता है मैं गैलेक्सी नेक्सस फोन पर चल रहा हूं - मेरे पास परीक्षण करने के लिए कई हैं)। इसलिए मैंने 4.0.4 के साथ एक नया फोन अनपॅक किया और यह काम किया! तो फिर वापस चला गया और दो मूल परीक्षण फोनों पर परीक्षण किया, दोनों 4.2 रन बना रहे थे, इस विफलता की उम्मीद है कि मैं इस बार देख रहा हूं। आश्चर्यजनक रूप से, अब यह उन फोन पर भी काम करता है। मैं कहना चाहता हूं कि मैंने यह काम फिर से करने के लिए कुछ किया है, लेकिन मैंने नहीं किया। मैं अभी भी रहस्यमय हूं, और अब भी संदिग्ध है कि जब मैं वास्तव में इसकी आवश्यकता होती हूं तो यह काम काम करने जा रहा है।

मुझे आश्चर्य है कि यदि ऐसी कोई संभावना है कि किसी तरह 4.0.4 का उपयोग कर ठीक से सर्वर मॉड्यूल के राज्य सेट कर सकते हैं जोड़ने के लिए, 4.2 उपकरणों के लिए यह ग्रहणशील बनाने? अंधेरे में बस एक शॉट, मुझे लगता है ...

अद्यतन 2 ===========================

मैंने पाया कि अयुग्मित हो और फिर से जोड़ी की अनुमति देगा कनेक्ट करने के लिए उपकरण। यह एक कामकाज है, लेकिन यह कुछ भी नहीं है।

+0

मैं एक ही मुद्दा है, मैं एक Datamax ओ'नील APEX4 प्रिंटर पर प्रिंट के माध्यम से ब्लूटूथ के लिए एक कोड है। हनीकॉम्ब 3.2 के साथ एक गैलेक्सी टैब 7 प्लस पर ठीक काम करता है। लेकिन आईसीएस या उच्चतर वाले अन्य उपकरणों में काम नहीं करते हैं। मैं ब्लूटूथ सॉकेट ऑब्जेक्ट की तुलना कर रहा हूं और बहुत अलग हैं। क्या आप वाकई कोई कोड नहीं जोड़ा है? – ClarkXP

+0

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

+0

@DanHulme मुझे लगता है कि आप सही हैं, यह अलग ब्लूटूथ स्टैक है जो इसका कारण बन रहा है। मैंने 4.1 के साथ कुछ परीक्षण किए, और यह ठीक काम करता है। यदि आप इसे उत्तर के रूप में लिखना चाहते हैं, तो मुझे इसे स्वीकार करने में खुशी होगी। –

उत्तर

8

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

+2

पर काम करता है, तो मुझे केवल अन्य Nexus संस्करणों, एंड्रॉइड 4.2.1 के साथ ही एक ही समस्या है - अन्य सभी एंड्रॉइड संस्करणों और अन्य फोन/डिवाइसों पर यह पूरी तरह से काम करता है। पुन: जोड़ना मदद नहीं करता है। क्या ऐसा कुछ और है जो इसे फिर से काम करने के लिए किया जाना चाहिए? बहुत धन्यवाद! पीएस मर यूयूआईडी आईएसटी ठीक है – user387184

+0

मैं भी एक ही समस्या से फंस गया हूं, किसी भी मदद की सराहना की जाएगी। –

2

मैं जानता हूँ कि यह एक पुराने सवाल की तरह है। लेकिन जैसा कि मैंने वेब पर कोई समाधान नहीं ढूंढ पाया था, यहां हाल ही में एक वर्कअराउंड है जिसे मैंने हाल ही में बनाया है: IOException: read failed, socket might closed - Bluetooth on Android 4.3

+0

बहुत दिलचस्प है। मुझे इसे आज़माकर देखना होगा कि यह मेरे उपकरणों पर भी काम करता है या नहीं। धन्यवाद! –

+0

ठंडा। क्या आप अपने निष्कर्षों की रिपोर्ट कर सकते हैं? मेरे पास केवल दो 4.3 डिवाइस उपलब्ध हैं। – matthes

+0

मुझे डर है कि मैं नहीं कर सकता। चूंकि मैंने पिछली पोस्ट पोस्ट की है, अब मुझे उस हार्डवेयर तक पहुंच नहीं है जहां मुझे यह त्रुटि आ रही थी। –

-3

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

+3

ओह आओ। क्या आप एक प्रोग्रामेटिक समाधान का सुझाव दे सकते हैं। – SoloPilot

+3

यह उत्तर कोई समझ नहीं आता है –