2012-06-07 20 views
8

हर जगह मुझे लगता है कि मुझे अपने ब्लूटूथ एडाप्टर के लिए "getBondedDevices()" यह विधि मिलती है। हालांकि, मेरे पास मेरा टैबलेट और एक और ब्लूटूथ डिवाइस है जो मेरे बगल में बैठा है, और मैं यह नहीं समझ सकता कि वास्तव में डिवाइस को बॉन्ड किए गए उपकरणों की सूची में कैसे दिखाना है।मैं वास्तव में एक डिवाइस कैसे भेजूं?

उत्तर

20

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

आप वास्तव में एक उपयोगकर्ता के रूप में डिवाइस सेटिंग से ऐसा कर सकते हैं, लेकिन इतना एक ऐप्लिकेशन के संदर्भ में ऐसा है, तो अपनी प्रक्रिया की संभावना कुछ इस तरह दिखेगा के लिए आप देख रहे हैं:

  1. रजिस्टर एक BroadcastReceiverBluetoothDevice.ACTION_FOUND और BluetoothAdapter.startDiscovery() फोन करके BluetoothAdapter. ACTION_DISCOVERY_FINISHED
  2. प्रारंभ खोज के लिए
  3. आपका रिसीवर पहली कार्रवाई के साथ हर बार एक नई डिवाइस रेंज में पाया जाता है कहा जाता हो जाएगा, और आप अगर यह एक तुम्हारे साथ कनेक्ट करना चाहते हैं यह देखने के लिए यह निरीक्षण कर सकते हैं । एक बार जब आप इसे आवश्यकतानुसार बैटरी को बर्बाद न करें तो आप BluetoothAdapter.cancelDiscovery() पर कॉल कर सकते हैं।
  4. जब खोज पूरी हो जाती है, अगर आपने इसे रद्द नहीं किया है, तो आपके रिसीवर को दूसरी कार्रवाई के साथ बुलाया जाएगा; इसलिए आप किसी और डिवाइस की अपेक्षा न करें।
  5. हाथ में डिवाइस के उदाहरण के साथ, BluetoothSocket और connect() खोलें। यदि डिवाइस पहले से ही बंधे नहीं हैं, तो यह युग्मन शुरू करेगा और पिन कोड के लिए कुछ सिस्टम UI दिखा सकता है।
  6. एक बार जोड़ा गया, आपका डिवाइस बंधुआ डिवाइस सूची में तब तक दिखाई देगा जब तक कि उपयोगकर्ता सेटिंग्स में नहीं जाता और इसे हटा देता है।
  7. connect() विधि वास्तव में सॉकेट लिंक भी खुलती है, और जब यह अपवाद फेंकने के बिना वापस आती है तो दो डिवाइस जुड़े होते हैं।
  8. अब कनेक्ट हो गया है, तो आप डेटा को पढ़ने और लिखने के लिए सॉकेट से getInputStream() और getOutputStream() पर कॉल कर सकते हैं।

असल में, आप बाहरी उपकरणों तक पहुंच प्राप्त करने के लिए बंधुआ उपकरणों की सूची का निरीक्षण कर सकते हैं, लेकिन अधिकांश अनुप्रयोगों में आप यह सुनिश्चित करने के लिए इस और वास्तविक खोज का संयोजन करेंगे कि आप हमेशा रिमोट से कनेक्ट हो सकते हैं उपकरण जो उपयोगकर्ता करता है उसके बावजूद डिवाइस। यदि कोई उपकरण पहले से ही बंधे हैं, तो आप कनेक्ट करने और संवाद करने के लिए केवल 5-7 कदम उठाएंगे।

अधिक जानकारी और नमूना कोड के लिए, Android SDK Bluetooth Guide के "डिस्कवरिंग डिवाइस" और "कनेक्टिंग डिवाइस" अनुभाग देखें।

HTH

+0

बहुत धन्यवाद जो वास्तव में मदद करता है। मैं वर्तमान में चरण संख्या 5 पर अटक गया हूं। मेरी ऑनसाइट विधि में मैं एक सूची में पाए गए डिवाइस जोड़ता हूं, लेकिन जहां तक ​​मुझे मिल गया है। मैं ब्लूटूथ सॉकेट कन्स्ट्रक्टर पर दस्तावेज़ ढूंढ रहा हूं लेकिन अभी तक कोई नहीं मिला है। क्या मैं बस एक ऑब्जेक्ट बनाता हूं, उस पर 'कनेक्ट()' फ़ंक्शन कॉल करता हूं, तो डिवाइस बंधुआ उपकरणों की मेरी सूची में दिखाई देंगे? पाए गए डिवाइस ArrayAdapter डेटा संरचना में हैं, मुझे इस विचार को समझने में परेशानी हो रही है कि एक नई वस्तु पर कनेक्ट() को कॉल करना मेरे लिए सब कुछ करेगा। – JuiCe

+1

यदि आप जिस देव मार्गदर्शिका से जुड़े हैं, उसे पढ़ते हैं, तो आप कनेक्टिंग उदाहरण में नोटिस करेंगे कि विधि 'createRfcommSocketToServiceRecord() 'डिवाइस से सॉकेट ऑब्जेक्ट उत्पन्न करने के लिए विधि का उपयोग किया जाता है। – Devunwired

+0

हाँ क्षमा करें, मैंने गाइड को देखा है और मैं अभी भी थोड़ा उलझन में हूं। मैं एक और ब्लूटूथ डिवाइस से कनेक्ट करने के लिए एक फोन/टैबलेट का उपयोग कर रहा हूं जो फोन/टैबलेट नहीं है। यह मामूली प्रतीत हो सकता है लेकिन मैं खुद को मनाने में सक्षम नहीं हूं, मैं इसे समझता हूं, जब मैं अपनी ऑब्जेक्ट में ब्लूटूथ सॉकेट जोड़ता हूं, तो मेरा फोन/टैबलेट सर्वर के रूप में कार्य करता है, सही? मैं इस पर भी उलझन में हूं कि उपकरणों को सुनने शुरू करने के लिए 'कनेक्ट()' कॉल करें, लेकिन मुझे पहले से ही डिवाइस मिल गया है और इसका पता है। यह वास्तव में क्या सुन रहा होगा? – JuiCe

0

एपीआई स्तर 19 और() BluetoothDevice instace पर ऊपर आप createBond कॉल कर सकते हैं जिससे आप कनेक्ट करना चाहते हैं। आपको पता और दृश्य उपकरणों

<uses-permission android:name="android.permission.BLUETOOTH"/> 
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 

कोड सूची कुछ अनुमति की आवश्यकता को खोजने और उनके उपकरणों को सूचीबद्ध करने देगा:

bluetoothFilter.addAction(BluetoothDevice.ACTION_FOUND); 
bluetoothFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED); 
bluetoothFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); 
registerReceiver(bluetoothReceiver, bluetoothFilter); 
private BroadcastReceiver bluetoothReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
       Log.e("bluetoothReceiver", "ACTION_FOUND"); 
       BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
       devicesList.add((device.getName() != null ? device.getName() : device.getAddress())); 
       bluetoothDevicesAdapter.notifyDataSetChanged(); 
      } else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) { 
       Log.e("bluetoothReceiver", "ACTION_DISCOVERY_STARTED"); 
      } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { 
       Log.e("bluetoothReceiver", "ACTION_DISCOVERY_FINISHED"); 
       getActivity().unregisterReceiver(bluetoothReceiver); 
      } 
     } 
}; 

बस चयनित डिवाइस पर createBond() कहते हैं।

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

  • कोई संबंधित समस्या नहीं^_^