diff --git a/app/build.gradle b/app/build.gradle
index 64b68ec..601b418 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -226,6 +226,7 @@ dependencies {
implementation "androidx.camera:camera-camera2:1.0.2"
implementation "androidx.camera:camera-lifecycle:1.0.2"
implementation "androidx.camera:camera-view:1.0.0-alpha25"
+ //蓝牙扫描
implementation 'no.nordicsemi.android.support.v18:scanner:1.6.0'
//蓝牙通讯
implementation 'no.nordicsemi.android:ble:2.11.0'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c16671f..9d670e7 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -35,6 +35,14 @@
+
+
+
+
+
+
diff --git a/app/src/main/java/com/ckkj/water/AppConfig.java b/app/src/main/java/com/ckkj/water/AppConfig.java
index 6b9c1e0..22d7c4a 100644
--- a/app/src/main/java/com/ckkj/water/AppConfig.java
+++ b/app/src/main/java/com/ckkj/water/AppConfig.java
@@ -120,4 +120,7 @@ public class AppConfig {
public static String APP_CLIENT_ID = "428a8310cd442757ae699df5d894f051";
public static String APP_USER_TYPE = "app_user";
+ //蓝牙设备的uuid
+ public static String BLUETOOTH_DEVICE_UUID = "1775244d-6b43-439b-877c-060f2d9bed07";
+
}
diff --git a/app/src/main/java/com/ckkj/water/device/AddDeviceActivity_copy.java b/app/src/main/java/com/ckkj/water/device/AddDeviceActivity_copy.java
index c2f6e89..d6b476d 100644
--- a/app/src/main/java/com/ckkj/water/device/AddDeviceActivity_copy.java
+++ b/app/src/main/java/com/ckkj/water/device/AddDeviceActivity_copy.java
@@ -29,7 +29,9 @@ import com.ckkj.water.BuildConfig;
import com.ckkj.water.ConstantUtil;
import com.ckkj.water.R;
import com.ckkj.water.base.BaseActivity;
+import com.ckkj.water.custom.GridSpacingItemDecoration;
import com.ckkj.water.databinding.AddDeviceLayoutBinding;
+import com.ckkj.water.device.adapter.BleScanDeviceAdapter;
import com.ckkj.water.device.mvp.DeviceContract;
import com.ckkj.water.device.mvp.DeviceImpl;
import com.ckkj.water.device.mvp.DevicePresenter;
@@ -72,6 +74,8 @@ public class AddDeviceActivity_copy extends BaseActivity mDeviceList = new ArrayList<>();
@Override
public DevicePresenter createPresenter() {
@@ -90,6 +94,10 @@ public class AddDeviceActivity_copy extends BaseActivity uuids =
- record.getServiceUuids();
- Log.e("TEST", "uuids=" + uuids);
- }
-
- ToastUtil.showShort(mContext, "扫描到: " + deviceName);
}
@Override
@@ -238,7 +242,6 @@ public class AddDeviceActivity_copy extends BaseActivity {
+ private Context mContext;
+ public BleScanDeviceAdapter(Context context,int layoutResId, @Nullable List data) {
+ super(layoutResId, data);
+ mContext = context;
+ }
+
+ @Override
+ protected void convert(BaseViewHolder helper, WaterDeviceEntity item) {
+ helper.setText(R.id.tv_device_name,item.getDeviceName());
+ }
+}
diff --git a/app/src/main/java/com/ckkj/water/utils/manager/WaterDeviceManager.java b/app/src/main/java/com/ckkj/water/utils/manager/WaterDeviceManager.java
new file mode 100644
index 0000000..ec5f7ed
--- /dev/null
+++ b/app/src/main/java/com/ckkj/water/utils/manager/WaterDeviceManager.java
@@ -0,0 +1,92 @@
+package com.ckkj.water.utils.manager;
+
+import android.bluetooth.BluetoothGatt;
+import android.bluetooth.BluetoothGattCharacteristic;
+import android.bluetooth.BluetoothGattService;
+import android.content.Context;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+
+import java.util.Arrays;
+import java.util.UUID;
+
+import no.nordicsemi.android.ble.BleManager;
+
+/**
+ * @author fengxiaoyang
+ * @date 2026/6/3
+ * @description 蓝牙设备管理
+ */
+public class WaterDeviceManager extends BleManager {
+ private BluetoothGattCharacteristic writeCharacteristic;
+ private BluetoothGattCharacteristic notifyCharacteristic;
+
+ public WaterDeviceManager(@NonNull Context context) {
+ super(context);
+ }
+
+ @NonNull
+ @Override
+ protected BleManagerGattCallback getGattCallback() {
+ return new DeviceGattCallback();
+ }
+
+ private class DeviceGattCallback extends BleManagerGattCallback {
+
+ @Override
+ protected void initialize() {
+
+ setNotificationCallback(notifyCharacteristic)
+ .with((device, data) -> {
+
+ byte[] bytes = data.getValue();
+
+ Log.e("TEST", "收到数据: "
+ + Arrays.toString(bytes));
+ });
+
+ enableNotifications(notifyCharacteristic)
+ .enqueue();
+ }
+
+ @Override
+ public boolean isRequiredServiceSupported(@NonNull BluetoothGatt gatt) {
+
+ BluetoothGattService service =
+ gatt.getService(UUID.fromString(
+ "0000ffff-0000-1000-8000-00805f9b34fb"));
+
+ if (service == null) {
+ return false;
+ }
+
+ writeCharacteristic =
+ service.getCharacteristic(UUID.fromString(
+ "0000ff01-0000-1000-8000-00805f9b34fb"));
+
+ notifyCharacteristic =
+ service.getCharacteristic(UUID.fromString(
+ "0000ff02-0000-1000-8000-00805f9b34fb"));
+
+ return writeCharacteristic != null
+ && notifyCharacteristic != null;
+ }
+
+ @Override
+ protected void onServicesInvalidated() {
+ writeCharacteristic = null;
+ notifyCharacteristic = null;
+ }
+ }
+
+ public void send(byte[] data) {
+
+ if (writeCharacteristic == null) {
+ return;
+ }
+
+ writeCharacteristic(writeCharacteristic, data)
+ .enqueue();
+ }
+}
diff --git a/app/src/main/res/layout/add_device_layout.xml b/app/src/main/res/layout/add_device_layout.xml
index 29ee08a..77ef5fd 100644
--- a/app/src/main/res/layout/add_device_layout.xml
+++ b/app/src/main/res/layout/add_device_layout.xml
@@ -1,5 +1,7 @@
+ android:src="@drawable/anim_add_device_scan"
+ android:visibility="visible"/>
-
+
+
+
+
\ No newline at end of file