2012-06-18 18 views
6

मैं एक ऐप लिख रहा हूं जो टैबलेट से बाइट कोड को μ-नियंत्रक में भेजता है। सब कुछ लेनोवो ए 1 (एंड्रॉइड 2.3) और सैमसंग गैलेक्सी टैब 7 प्लस एन (एंड्रॉइड 3.2) पर ठीक काम किया। अब मुझे नए सैमसंग गैलेक्सी टैब 2 (एंड्रॉइड 4.0) के साथ समस्याएं आ रही हैं।एंड्रॉइड आईसीएस पर ब्लूटूथ कनेक्शन संभव नहीं

मैं ब्लूटूथ एंटीना (जो μ-नियंत्रक से जुड़ा हुआ है और धारावाहिक प्रोटोकॉल पर संचार करता है) के साथ युग्मित करने में सक्षम हूं। जब मैं ऐप शुरू करता हूं तो मुझे पासवर्ड दर्ज करने और युग्मित करने के लिए फिर से पूछा जाता है। जोड़ीकरण पासवर्ड दर्ज करने के बाद मेरा मुख्य लेआउट दिखाई देता है लेकिन कनेक्शन स्थापित नहीं होता है।

ग्रहण में LogCat मुझसे कहता है:

06-19 16:00:20.656: V/BluetoothSocket.cpp(3189): availableNative 
06-19 16:00:20.664: V/BluetoothSocket.cpp(3189): abortNative 
06-19 16:00:20.664: V/BluetoothSocket.cpp(3189): ...asocket_abort(49) complete 
06-19 16:00:20.664: I/ActivityManager(185): No longer want com.google.android.partnersetup (pid 3220): hidden #16 
06-19 16:00:20.671: V/BluetoothSocket.cpp(3189): availableNative 
06-19 16:00:20.671: V/BluetoothSocket.cpp(3189): destroyNative 
06-19 16:00:20.671: V/BluetoothSocket.cpp(3189): ...asocket_destroy(49) complete 
06-19 16:00:20.679: D/KeyguardViewMediator(185): setHidden false 
06-19 16:00:20.679: W/System.err(3189): java.io.IOException: socket closed 
06-19 16:00:20.679: W/System.err(3189):  at android.bluetooth.BluetoothSocket.available(BluetoothSocket.java:370) 
06-19 16:00:20.679: W/System.err(3189):  at android.bluetooth.BluetoothInputStream.available(BluetoothInputStream.java:40) 
06-19 16:00:20.679: W/System.err(3189):  at java.io.BufferedInputStream.available(BufferedInputStream.java:114) 
06-19 16:00:20.687: W/System.err(3189):  at ebs.alphadidact.control.ReceiveThread.run(ReceiveThread.java:79) 

इसके अलावा अधिक है LogCat एक हज़ार बार प्राप्त संदेश:

V/BluetoothSocket.cpp(3189): availableNative 

तो जैसा कि मैं वेब में खोजा गया मैं के साथ कुछ लोगों ने पाया एक समान समस्या लेकिन कोई समाधान नहीं। क्या किसी को इस मुद्दे के बारे में कुछ पता है?

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

+0

क्या आपने इसे हल किया है? – PankajAndroid

उत्तर

4

ठीक है, मुझे पता चला कि समस्या क्या है। मुझे यकीन नहीं है कि यह सिर्फ सैमसंग समस्या है या एक एंड्रॉइड आईसीएस समस्या है।

मैं का उपयोग कर (सॉकेट प्राप्त करने के लिए) से हमेशा की तरह एंटीना से कनेक्ट करने की कोशिश की:

clientSocket = device.createRfcommSocketToServiceRecord(MY_UUID); 

खैर ऐसा लगता है कि यह मेरे एंटीना और टेबलेट सेटअप के साथ काम नहीं करता, तो मैं करने की कोशिश की:

clientSocket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID); 

यह काम करता है। पहले विकल्प ने सिस्टम को एंटीना को अनपेक्षित करने के लिए मजबूर कर दिया और बाद में फिर से युग्मन करने के लिए कहा।

+0

वाह, इससे मुझे मदद मिली! धन्यवाद! – Jaykob

2

वास्तव में एक असुरक्षित सॉकेट बनाना दो अनपेक्षित उपकरणों को जोड़ने जैसा ही है। यह इसे संभालने का सबसे अच्छा तरीका स्पष्ट रूप से नहीं है।

मुझे पता चला है कि एंड्रॉइड डिवाइस पर मरम्मत करने की कोशिश करता है, और फिर यह युग्मन प्रतिक्रिया को अस्वीकार करता है। इस विचित्र व्यवहार के बाद, यह अगले कनेक्शन प्रयास स्वीकार करेगा!

मैंने एंड्रॉइड बगट्रैकर भी कोशिश की: Bluetooth RFCOMM Server Socket no longer connects properly to embedded device on ICS 4.0.3

फिर भी प्रतिक्रिया की प्रतीक्षा ...

1

मेरा मानना ​​है कि मैं एक ही समस्या देख रहा हूँ। मैं Google play से एक स्पैप टर्मिनल ऐप का उपयोग कर रहा हूं जो डिवाइस को मेरे स्टॉक droid x के साथ जोड़कर पूरी तरह से काम करता है। लेकिन अब मेरे गैलेक्सी एस 3 के साथ एक ही ऐप और उसी डिवाइस के साथ मुझे हर बार फिर से जोड़ना होगा।

आपका समाधान एक प्रकार का कामकाज है। ऐसा लगता है कि एंड्रॉइड ने आईसीएस में इस व्यवहार को बदल दिया। इसलिए असली फिक्स Google के लिए आईपीएस को ठीक करने के लिए है ताकि स्पैप डिवाइस को युग्मित किए बिना जोड़े और कनेक्ट करने की अनुमति मिल सके।

BluetoothSocket mSocket = null; 
mBluetoothAdapter.cancelDiscovery(); 
Method method; 
try { 
    method = mBluetoothDevice.getClass() 
     .getMethod("createRfcommSocket", new Class[] { int.class}); 
    mSocket = (BluetoothSocket) method.invoke(mBluetoothDevice,1); 
} catch (NoSuchMethodException e1) { 
    e1.printStackTrace(); 
} catch (IllegalArgumentException e) { 
    e.printStackTrace(); 
} catch (IllegalAccessException e) { 
    e.printStackTrace(); 
} catch (InvocationTargetException e) { 
    e.printStackTrace(); 
} 

mSocket.connect(); 
+0

आप जो भी जोड़ चाहते हैं उसे शामिल करने के लिए आप अपना उत्तर संपादित कर सकते हैं। बस उपरोक्त छोटे "संपादन" लिंक पर क्लिक करें (उत्तर के नीचे बाईं ओर)। – davidcesarino

0

इस कोड का उपयोग करना::

BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address); 
mBluetoothAdapter.cancelDiscovery(); 

Method m; 
try { 
    m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] { int.class }); 
    btSocket = (BluetoothSocket) m.invoke(device, 1); 
} catch (SecurityException e1) { 
    e1.printStackTrace(); 
} catch (NoSuchMethodException e1) { 
    e1.printStackTrace(); 
} catch (IllegalArgumentException e) { 
    e.printStackTrace(); 
} catch (IllegalAccessException e) { 
    e.printStackTrace(); 
} catch (InvocationTargetException e) { 
    e.printStackTrace(); 
} 

और हमारे एप्लिकेशन प्रकट करने के लिए निम्न जोड़ना काम

<uses-sdk android:minSdkVersion="13" android:targetSdkVersion="16"/>

लेकिन, मुझे एक ऐसी ही समस्या का समाधान करने के लिए कुछ कोड देखा था

2

@fuentessifuentes उत्तर के लिए धन्यवाद मैंने इस विधि को शामिल किया एनजी पिछड़ा संगतता:

private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException { 
    if(Build.VERSION.SDK_INT >= 10){ 
     try { 
      final Method m = device.getClass().getMethod("createInsecureRfcommSocketToServiceRecord", new Class[] { UUID.class }); 
      return (BluetoothSocket) m.invoke(device, SPP_UUID); 
     } catch (Exception e) { 
      Log.e(TAG, "Could not create Insecure RFComm Connection",e); 
     } 
    } 
    return device.createRfcommSocketToServiceRecord(SPP_UUID); 
} 

शायद यह इस जारीकर्ता से किसी को मदद करता है।

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