配对时如何连接蓝牙设备?

时间:2016-08-10 11:11:09

标签: android bluetooth android-bluetooth

我有一个用于配对和连接蓝牙设备的课程。我正在使用Android 6.0来实现它。该应用程序有两个按钮,用于配对和连接功能。它对配对功能很有用。但是,我无法实现连接功能。我看了一些蓝牙连接的例子,但是当我在这个课程中使用它们时它们没有用。请看我的班级并给我一些指导来实施它?谢谢大家

enter image description here

public class DeviceListActivity extends Activity {
    private ListView mListView;
    private DeviceListAdapter mAdapter;
    private ArrayList<BluetoothDevice> mDeviceList;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_paired_devices);

        mDeviceList     = getIntent().getExtras().getParcelableArrayList("device.list");

        mListView       = (ListView) findViewById(R.id.lv_paired);

        mAdapter        = new DeviceListAdapter(this);

        mAdapter.setData(mDeviceList);
        mAdapter.setPairListener(new DeviceListAdapter.OnPairButtonClickListener() {
            @Override
            public void onPairButtonClick(int position) {
                BluetoothDevice device = mDeviceList.get(position);

                if (device.getBondState() == BluetoothDevice.BOND_BONDED) {
                    unpairDevice(device);
                } else {
                    showToast("Pairing...");

                    pairDevice(device);
                }
            }

        });
        mAdapter.setConnectListener(new DeviceListAdapter.OnConnectButtonClickListener() {
            @Override
            public void onConnectButtonClick(int position) {
            //Connect bluetooth
            }

        });
        mListView.setAdapter(mAdapter);

        registerReceiver(mPairReceiver, new IntentFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED));
    }

    @Override
    public void onDestroy() {
        unregisterReceiver(mPairReceiver);

        super.onDestroy();
    }


    private void showToast(String message) {
        Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
    }

    private void pairDevice(BluetoothDevice device) {
        try {
            Method method = device.getClass().getMethod("createBond", (Class[]) null);
            method.invoke(device, (Object[]) null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void unpairDevice(BluetoothDevice device) {
        try {
            Method method = device.getClass().getMethod("removeBond", (Class[]) null);
            method.invoke(device, (Object[]) null);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private void connectDevice(BluetoothDevice device) {
    // Connect bluetooth
    }

    private final BroadcastReceiver mPairReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();

            if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
                 final int state        = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.ERROR);
                 final int prevState    = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, BluetoothDevice.ERROR);

                 if (state == BluetoothDevice.BOND_BONDED && prevState == BluetoothDevice.BOND_BONDING) {
                     showToast("Paired");
                 } else if (state == BluetoothDevice.BOND_NONE && prevState == BluetoothDevice.BOND_BONDED){
                     showToast("Unpaired");
                 }

                 mAdapter.notifyDataSetChanged();
            }
        }
    };
}

1 个答案:

答案 0 :(得分:3)

作为客户端连接很简单。您首先通过调用createRfcommSocketToServiceRecord()从所需的BluetoothDevice获取RFCOMM套接字,并传入UUID,即您创建的128位值。 UUID类似于端口号

如果你从配对列表中拿着蓝牙设备,你可以使用这个类来连接它,

{{1}}

我建议使用本教程作为一个启动点来学习并了解更多关于android中的蓝牙如何工作。

http://code.tutsplus.com/tutorials/create-a-bluetooth-scanner-with-androids-bluetooth-api--cms-24084