1、 声明蓝牙权限: <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> 2、 关键代码: 获取到蓝牙适配器 BluetoothAdapter bluetoothAdapter= BluetoothAdapter.getDefaultAdapter(); bluetoothAdapter.isEnabled(); // 判断蓝牙是否开启 bluetoothAdapter.enable();// 打开蓝牙 bluetoothAdapter.disable();// 关闭蓝牙 bluetoothAdapter.startDiscovery();// 开始扫描 3、动态注册一个广播来接收扫描到的蓝牙设备 private BroadcastReceiver blueToothReceiver = new BroadcastReceiver() {
@Override public void onReceive(Context context, Intent intent) { switch (intent.getAction()) { // 每当扫描到蓝牙设备,都会被触发 case BluetoothDevice.ACTION_FOUND: BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); refresh(device); // 将扫描到的蓝牙添加到ArrayList中 break; } } }; // 动态注册广播 IntentFilter filter = new IntentFilter(); filter.addAction(BluetoothDevice.ACTION_FOUND); registerReceiver(blueToothReceiver, filter); //这里是使用RecycleView进行显示的 public void refresh(BluetoothDevice device) { if (!mDevices.contains(device)) { mDevices.add(device);// 需要对该设备进行判断,因为该设备可能在之前已经被添加到集合中了,那么则不用再进行添加 adapter.notifyDataSetChanged(); } } 4、连接蓝牙 private OutputStream outputStream; /** * 蓝牙的连接也是耗时操作,与访问网络差不多,所以需要创建子线程进行执行 */ private void connect (final BluetoothDevice device) { new Thread() { public void run() { try { BluetoothSocket bluetoothSocket = device.createRfcommSocketToServiceRecord(UUID.fromString("服务器的UUID")); bluetoothSocket.connect();// 连接 outputStream = bluetoothSocket.getOutputStream();// 拿到输出流, 就可以往蓝牙服务端写东西了 } catch (IOException e) { e.printStackTrace(); } } }.start(); }
个人浅见,有错误请帮忙指出,谢谢!