2014-07-04 7 views
6

विफल रहता है मैं एक एंड्रॉइड डिवाइस और आरएफआईडी रीडर ब्लूटूथ के बीच कनेक्शन बनाने की कोशिश कर रहा हूं। ऐसा करने के लिए मैं ब्लूटूथ चैट (bluetooth chat example) के कोड का उपयोग करता हूं। लेकिन जब मैं ब्लूटूथ चैट उदाहरण के लाइन 32 9 पर mmSocket.connect(); करता हूं, तो कनेक्शन हर बार java.io.IOException उत्पन्न करता है। मैंने सॉकेट प्राप्त करने के लिए भी इस विधि को आजमाया:एंड्रॉइड ब्लूटूथ सॉकेट.कनेक्ट()

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

लेकिन कुछ भी नहीं। मैंने 3 अंतर उपकरणों के साथ प्रयास किया। पहले, एक Samung एस 2 एंड्रॉयड 4.4.2 चल मुझे इस त्रुटि दे:

failed:read failed, socket might closed, read ret: -1 
एंड्रॉयड 4.0.3 चल रहा एक गोली के साथ

मुझे इस त्रुटि दे:

IOException: Connection refused 

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

उत्तर

0

मुझे एक ही समस्या थी। इसे हल करना आसान है। आपको अपने आरएफआईडी रीडर को अपने कॉन्फ़िगरेशन प्रोग्राम के साथ एसपीपी प्रोटोकॉल में कॉन्फ़िगर करना होगा और उसके बाद वह काम करेगा।

+0

बहुत कुछ थक गया !! इस काम!! – user3805317

+4

क्या आप समाधान को स्पष्ट कर सकते हैं? – nAkhmedov

4

आपका कोड सुरक्षित बीटी कनेक्शन मानता है, और दो अलग-अलग तरीकों से प्रयास करता है (जो अच्छा है)।

BluetoothSocket sock; 

// open API 
sock = device.createInsecureRfcommSocketToServiceRecord(serviceUuid); 

// if failed: hidden API 
createMethod = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] { int.class }); 
sock = (BluetoothSocket)createMethod.invoke(device, 1); 


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

UUID DEFAULT_SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); 

यह कई उपकरणों पर काम करता है, लेकिन सभी पर नहीं।


करने की कोशिश UUIDs की सूची यह का समर्थन करता है के लिए अपने साथियों के पूछताछ:

// for apiVer >= 15 
supportedUuids = device.getUuids(); 


// for apiVer < 15 
try { 
    Class cl = Class.forName("android.bluetooth.BluetoothDevice"); 
    Class[] params = {}; 
    Method method = cl.getMethod("getUuids", params); 
    Object[] args = {}; 
    supportedUuids = (ParcelUuid[])method.invoke(device, args); 
} 
catch (Exception e) { 
    // no op 
    Log.e("uuids", "Activation of getUuids() via reflection failed: " + e); 
} 

और, यदि खाली नहीं, पहली सरणी में पैरामीटर के रूप में निर्माण विधि का उपयोग करें।

आप BTWiz का भी उपयोग कर सकते हैं, जो वास्तव में आपके द्वारा लिखा गया है, जो आपके लिए पारदर्शी गिरावट वाले मॉडल में आपके लिए सब कुछ करता है, और एसिंक ब्लूटूथ आईओ का भी समर्थन करता है।

1

मुझे यह समस्या भी थी, मैंने इस पोस्ट में जो भी कहा था, मैंने कोशिश की, लेकिन मेरे लिए कुछ भी काम नहीं किया। मुझे अंत में इसे ठीक करना पड़ा। मेरे गलत कोड यदि ब्लूटूथ पर था जाँच करने के लिए, इस तरह एक वर्ग चर BluetoothAdapter प्रयोग किया है:

public class PrintClass extends Activity { 
private XXXX myClassVar; 
private BluetoothAdapter bluetooth; // created and checked in other method 

... other methods in my class.... 

}

मुझे मिल गया bt सॉकेट कनेक्ट विफल रहता है हर समय। लेकिन मैंने ब्लूटूथ को सक्रिय करने के लिए एक निजी विधि का उपयोग किया, और सॉकेट समस्या गायब हो गई।

public class PrintClass extends Activity { 

private XXXX myClassVar; 

private void turnBlueToothOn(){ 

    try { 
     BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter(); 
     if(!bluetooth.isEnabled()){ 
      bluetooth.enable(); 
     } 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
....other methods in my class.... 
} 

क्यों ?? मुझे नहीं पता, सिर्फ मेरे लिए काम किया !!!!

+0

धन्यवाद, मैं क्यों नहीं बल्कि ब्लूटूथ को पुनः सक्षम करता हूं, इस समस्या को ठीक करता हूं – Bhupinder

0

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

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