Android Bluetooth accept() / connect() with already paired devices

后端 未结 3 1144
执笔经年
执笔经年 2021-02-04 18:56

I am having trouble connecting two Android devices via Bluetooth, which happens only when they have been paired before. I am running one as the server and the other as the clien

相关标签:
3条回答
  • 2021-02-04 19:20

    Check out this example: http://developer.android.com/resources/samples/BluetoothChat/index.html.

    this could explain how the bluetooth device connected and trans informations.

    0 讨论(0)
  • 2021-02-04 19:30

    In the client when I attempt to make a connection to a bonded device, I simply called it on the BluetoothDevice I found in BluetoothAdapter.getBondedDevices(). This does NOT work.

    In order to properly establish the Bluetooth connection, I had to do something similar to the pseudocode below:

    BluetoothDevice bonded = a device from BluetoothAdapter.getBondedDevices();
    BluetoothDevice actual = BluetoothAdapter.getRemoteDevice(bonded.getAddress());
    
    BluetoothSocket socket = actual.createRfcommSocketToServiceRecord(SOME_UUID);
    socket.connect();
    

    I arrived this answer by following exactly the Bluetooth chat example: Bluetooth Chat Service. Why it doesn't work on the device from getBondedDevices() is beyond me. Maybe someone with more intimate knowledge of Android can answer that.

    0 讨论(0)
  • 2021-02-04 19:41
    private static BluetoothSocket mSocket;
    BluetoothDevice selectDevice = null;
    

    void connectDevice(){
        if(mSocket == null) {
            //Log.d(TAG, "Socket is null");
            UUID SPP_UUID = UUID
                    .fromString("8ce255c0-200a-11e0-ac64-0800200c9a66");
            Set<BluetoothDevice> bondedDevices = BluetoothAdapter
                    .getDefaultAdapter().getBondedDevices();
            //Log.d(TAG, "Size: " + bondedDevices.size());
            /**
             * Select your divice form paired devices
             */
            for (BluetoothDevice bluetoothDevice : bondedDevices) {
                selectDevice = bluetoothDevice;
                //Log.d(TAG, bluetoothDevice.getName()+" "+bluetoothDevice.getAddress());
            }
    
            if(selectDevice.getBondState() == selectDevice.BOND_BONDED) {
                //Log.d(TAG, selectDevice.getName());
                try {
                    mSocket = selectDevice.createInsecureRfcommSocketToServiceRecord(SPP_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");
                        e1.printStackTrace();
                    }
                }
       }
    
    0 讨论(0)
提交回复
热议问题