android - क्रमिक रूप से युग्मित ब्लूटूथ डिवाइस से कनेक्ट करें




bluetooth (3)

ठीक है, क्योंकि यह मुझे पागल कर रहा था, मैंने स्रोत कोड में कुछ खुदाई की थी और मुझे एक युग्मित A2DP डिवाइस (जैसे हेडसेट) से कनेक्ट करने के लिए 100% विश्वसनीय (कम से कम मेरे Nexus 4, Android 4.3 पर) समाधान मिला है या ब्लूटूथ ऑडियो डिवाइस)। मैंने एक पूरी तरह से काम कर रहे नमूना प्रोजेक्ट (आसानी से एंड्रॉइड स्टूडियो के साथ बनाया गया) को प्रकाशित किया है जिसे आप यहां जीथब पर पा सकते हैं।

अनिवार्य रूप से, आपको क्या करने की आवश्यकता है:

  • BluetoothAdapter एडेप्टर का एक उदाहरण प्राप्त करें
  • इस उदाहरण का उपयोग करते हुए, A2DP के लिए एक प्रोफ़ाइल प्रॉक्सी प्राप्त करें:

adapter.getProfileProxy (context, listener, BluetoothProfile.A2DP);

जहाँ listener एक ServiceListener जो अपने onServiceConnected() callback (जो कि BluetoothA2dp उदाहरण के लिए डाली जा सकती है onServiceConnected() में एक BluetoothProfile प्राप्त करेगा

  • प्रॉक्सी पर connect(BluetoothDevice) विधि प्राप्त करने के लिए प्रतिबिंब का उपयोग करें:

Method connect = BluetoothA2dp.class.getDeclaredMethod("connect", BluetoothDevice.class);

  • अपना BluetoothDevice ढूंढें:
String deviceName = "My_Device_Name";

BluetoothDevice result = null;

Set<BluetoothDevice> devices = adapter.getBondedDevices();
if (devices != null) {
    for (BluetoothDevice device : devices) {
        if (deviceName.equals(device.getName())) {
            result = device;
            break;
        }
    }
}
  • और connect() विधि लागू करें:

connect.invoke(proxy, result);

जो, कम से कम मेरे लिए, डिवाइस के तत्काल कनेक्शन का कारण बना।

क्या एक तरीका है, एंड्रॉइड एसडीके का उपयोग करके, प्रोग्राम-टू-युग्मित ब्लूटूथ डिवाइस से कनेक्ट करने के लिए?

दूसरे शब्दों में: मैं सेटिंग्स -> वायरलेस और नेटवर्क -> ब्लूटूथ सेटिंग्स में जा सकता हूं, और डिवाइस को टैप कर सकता हूं ("जोड़ी गई लेकिन कनेक्ट नहीं हुई" के रूप में सूचीबद्ध), जिस बिंदु पर यह कनेक्ट होगा। मैं इस प्रोग्राम को करने में सक्षम होना चाहता हूं, लेकिन ऐसा करने का कोई तरीका नहीं है।

मुझे RFCOMM सॉकेट बनाने के लिए विकल्प दिखाई देते हैं, और एक SPP डिवाइस के लिए, मैं मान रहा हूँ कि मैं कनेक्शन का हिस्सा भी करूँगा, लेकिन A2DP डिवाइस के लिए, जहाँ वास्तविक डेटा स्थानांतरण OS द्वारा संभाला जाएगा बजाय मेरा ऐप, मुझे लगता है कि यह लागू नहीं है?


मेरी समस्या को हल करने का सबसे अच्छा तरीका मुझे पता चल गया था कि मैं एक बटन बना सकता हूं जो ब्लूटूथ सेटिंग्स स्क्रीन को लाता है। मुझे नहीं पता था कि आप ऐसा कर सकते हैं, या मैं शुरू से ही ऐसा करूंगा।

startActivity(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS));

यदि डिवाइस पहले से ही युग्मित है, तो आप उपयोग कर सकते हैं

if(device.getBondState()==device.BOND_BONDED){

        Log.d(TAG,device.getName());
        //BluetoothSocket mSocket=null;
        try {


            mSocket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            Log.d(TAG,"socket not created");
            e1.printStackTrace();
        }
        try{

            mSocket.connect();

        }
        catch(IOException e){
            try {

                mSocket.close();
                Log.d(TAG,"Cannot connect");
            } catch (IOException e1) {
                Log.d(TAG,"Socket not closed");
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }


        }

MY_UUID उपयोग के लिए

private static final UUID MY_UUID = UUID.fromString("0000110E-0000-1000-8000-00805F9B34FB");

उपरोक्त कोड स्निपेट आपके डिवाइस को A2DP समर्थित डिवाइस से कनेक्ट करने के लिए है। मुझे उम्मीद है कि यह काम करेगा।





bluetooth