BluetoothTool.java 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package com.example.chemical.utils.bluetooth;
  2. import android.annotation.SuppressLint;
  3. import android.bluetooth.BluetoothAdapter;
  4. import android.bluetooth.BluetoothDevice;
  5. import android.bluetooth.BluetoothManager;
  6. import android.bluetooth.BluetoothSocket;
  7. import android.os.Build;
  8. import android.util.Log;
  9. import com.blankj.utilcode.util.LogUtils;
  10. import com.blankj.utilcode.util.Utils;
  11. import com.example.chemical.utils.Tool;
  12. import java.io.InputStream;
  13. import java.nio.charset.StandardCharsets;
  14. import java.util.Set;
  15. import java.util.UUID;
  16. public enum BluetoothTool {
  17. INSTANCE;
  18. BluetoothAdapter bluetoothAdapter;
  19. private UUID uuid;
  20. private byte[] buffer = new byte[1024];
  21. private BluetoothDevice bluetoothDevice;
  22. private BluetoothSocket bluetoothSocket;
  23. private InputStream inputStream;
  24. private BluetoothTool() {
  25. uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
  26. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  27. BluetoothManager bluetoothManager = Utils.getApp().getSystemService(BluetoothManager.class);
  28. bluetoothAdapter = bluetoothManager.getAdapter();
  29. } else {
  30. bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
  31. }
  32. }
  33. @SuppressLint("MissingPermission")
  34. public void connect(BluetoothCallBack bluetoothCallBack) {
  35. if (!bluetoothAdapter.isEnabled()) {
  36. Tool.INSTANCE.setBluetooth(true);
  37. }
  38. bluetoothDevice = getWeighDevice();
  39. if (null == bluetoothDevice) {
  40. return;
  41. }
  42. try {
  43. bluetoothSocket = bluetoothDevice.createInsecureRfcommSocketToServiceRecord(uuid);
  44. bluetoothSocket.connect();
  45. inputStream = bluetoothSocket.getInputStream();
  46. int bytesRead;
  47. String weight = "";
  48. while (null != bluetoothSocket && bluetoothSocket.isConnected() && null != inputStream && (bytesRead = inputStream.read(buffer)) != -1) {
  49. // 处理读取的数据
  50. String data = new String(buffer, 0, bytesRead, StandardCharsets.UTF_8);
  51. String[] split = data.split("\n", -1);
  52. if (split.length > 0) {
  53. String line = split[0].trim();
  54. if (!weight.equals(line)) {
  55. weight = line;
  56. bluetoothCallBack.callBack(weight);
  57. }
  58. }
  59. Thread.sleep(1);
  60. }
  61. } catch (Exception e) {
  62. disconnect();
  63. LogUtils.e(Log.getStackTraceString(e));
  64. }
  65. }
  66. public void disconnect() {
  67. if (null != bluetoothDevice) {
  68. bluetoothDevice = null;
  69. }
  70. if (null != bluetoothSocket && bluetoothSocket.isConnected()) {
  71. try {
  72. inputStream.close();
  73. inputStream = null;
  74. bluetoothSocket.close();
  75. bluetoothSocket = null;
  76. } catch (Exception e) {
  77. LogUtils.e(Log.getStackTraceString(e));
  78. }
  79. }
  80. }
  81. public interface BluetoothCallBack {
  82. void callBack(String weight);
  83. }
  84. @SuppressLint("MissingPermission")
  85. private BluetoothDevice getWeighDevice() {
  86. if (null != bluetoothDevice) {
  87. return bluetoothDevice;
  88. }
  89. Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
  90. if (!pairedDevices.isEmpty()) {
  91. // There are paired devices. Get the name and address of each paired device.
  92. for (BluetoothDevice device : pairedDevices) {
  93. String deviceName = device.getName();
  94. if ("HF-18".equals(deviceName)) {
  95. return device;
  96. }
  97. }
  98. }
  99. return null;
  100. }
  101. }