一:蓝牙开发,需要添加蓝牙权限
<uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
二:分类:经典蓝牙、低功耗蓝牙、双向蓝牙
三:经典蓝牙:
搜索设备:
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED); filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED); filter.addAction(BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED); registerReceiver(mBroadcastReceiver, filter);
广播接收处理搜索到的设备
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); switch (action) { case BluetoothDevice.ACTION_ACL_DISCONNECTED://断开连接 Log.e(TAG, "断开连接设备"); break; case BluetoothDevice.ACTION_FOUND: BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); Log.e(TAG, "搜索到的蓝牙设备"); break; case BluetoothDevice.ACTION_BOND_STATE_CHANGED: device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); Log.e(TAG, "设备状态的改变"); break; } } };
开启线程,连接设备
Method m = currentDevice.getClass().getMethod("createRfcommSocket", new Class[]{int.class}); socket = (BluetoothSocket) m.invoke(currentDevice, 1); new Thread(new Runnable() { @Override public void run() { try { Log.e(TAG, "开始连接"); socket.connect(); isAccept = true; Log.d(TAG, "连接成功,开始处理接收到的数据================"); InputStream is = socket.getInputStream(); byte[] buffer; while (isAccept) { int length = is.available(); //获取buffer里的数据长度 while (length != 0) { buffer = new byte[length]; //初始化byte数组为buffer中数据的长度 is.read(buffer); length = is.available(); Log.e(TAG, "设备传信息:" + Arrays.toString(buffer)); } } catch (Exception e) { Log.e(TAG, "连接失败信息: " + e.toString()); } } }).start();