2011-09-01 21 views
10

मैं एक ऐसा एप्लीकेशन विकसित कर रहा हूं जो स्वचालित रूप से ब्लूटूथ के माध्यम से 2 एंड्रॉइड डिवाइस कनेक्ट करे। मान लें कि वे पहले से ही जोड़े गए हैं। क्या यह हासिल करना संभव है?ब्लूटूथ के साथ 2 एंड्रॉइड डिवाइस को प्रोग्रामिक रूप से कैसे कनेक्ट करें?

+1

यह संभव है में सर्वर (यहाँ हम एक ग्राहक बना लिया है) बनाने का तरीका मिल जाए, पर एक नजर है: http://developer.android.com /guide/topics/wireless/bluetooth.html –

+1

नकारात्मक पक्ष पर, इस तरह के एक आवेदन, उदाहरण के लिए जो लगातार कनेक्शन बनाने के लिए पेजिंग करता है, बैटरी जीवन पर प्रतिकूल प्रभाव डालता है। अच्छा विचार नहीं। –

उत्तर

18

बेशक यह संभव है। मैं प्रलेखन से बाहर एक छोटा ट्यूटोरियल बनाउंगा:

ब्लूटूथ एडाप्टर से शुरू करें - यह आपका ब्लूटूथ प्रबंधक है।

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 

तो bluetoothAdapter रिक्त है, इसका मतलब है कि इस Android उपकरण ब्लूटूथ (यह कोई ब्लूटूथ रेडियो है। हालांकि मुझे लगता है कि इन उपकरणों का सामना करने के दुर्लभ है ...)

इसके बाद, यह सुनिश्चित कर लें का समर्थन नहीं करता ब्लूटूथ चालू है:

if (!bluetoothAdapter.isEnabled()) { 
     Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
     startActivityForResult(enableBtIntent, request_code_for_enabling_bt); 
} 

यदि यह चालू नहीं है, तो हम उस गतिविधि को शुरू करते हैं जो उपयोगकर्ता को इसे सक्षम करने के लिए कहता है।

मान लें कि उपयोगकर्ता ने सक्षम किया है (मुझे लगता है कि आपको यह देखना चाहिए कि उसने क्या किया है, इसे अपने onActivityResult विधि में करें)। हम युग्मित उपकरणों के लिए क्वेरी कर सकते हैं: उन पर

Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBoundedDevices(); 

फिर पाश: for(BluetoothDevice device : pairedDevices) और एक आप कनेक्ट करना चाहते हैं।

एक बार जब आप एक डिवाइस मिल गया है, यह कनेक्ट करने के लिए एक सॉकेट बनाने के लिए:

BluetoothSocket socket = device.createRfcommSocketToServiceRecord(YOUR_UUID); 

YOUR_UUID एक UUID अपने एप्लिकेशन का एक विशेष आईडी वाले वस्तु है। इसके बारे में here पढ़ें।

अब, प्रयास कनेक्ट करने के लिए (डिवाइस आप सुन मोड पर एक ही UUID के साथ बनाई गई एक सॉकेट होना आवश्यक है कनेक्ट करने का प्रयास कर रहे हैं):

socket.connect(); 

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

और वहां! आप किसी अन्य डिवाइस से जुड़े हुए हैं। अब इनपुट और आउटपुट स्ट्रीम प्राप्त करें:

InputStream is = socket.getInputStream(); 
OutputStream os = socket.getOutputStream(); 

और आप डेटा भेजने/प्राप्त करना शुरू कर सकते हैं। ध्यान रखें कि दोनों क्रियाएं (भेजना और प्राप्त करना) अवरुद्ध कर रहे हैं, इसलिए आपको इन्हें अलग-अलग धागे से कॉल करना चाहिए।

इस बारे में अधिक पढ़ें, और Bluetooth documentation.

+1

धन्यवाद, मैंने पहले ही लागू कर दिया है कि मेरे आवेदन में कुछ समय पहले मैंने इसे सब कुछ समझ लिया था, फिर भी आपका जवाब बहुत अच्छा है और मैं इसे स्वीकार करने के रूप में चिह्नित कर रहा हूं। – Miky

+0

@ मिकी क्या आप हमें अपना कार्यान्वयन दिखा सकते हैं – jaimin

+0

@jaimin क्षमा करें स्वचालित ब्लूटूथ कनेक्शन ने मेरे लिए संतोषजनक काम नहीं किया।एक विकल्प के रूप में वाईफाई चुना था। – Miky

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

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