feat: Foreground Service + Detachment 개선 + Placement 가이드 모드
Foreground Service (BleForegroundService.kt): - BLE 연결 시 자동 시작, 해제 시 자동 중단 - PARTIAL_WAKE_LOCK (최대 4시간) - Notification: "VesiScan - BLE 기기 연결 중..." - connectedDevice foregroundServiceType - Doze 모드에서도 BLE 통신 유지 - keepScreenOn도 유지 (추가 안전장치) Detachment 개선: - THR_MEAN/STD 100→30 (완전 탈착만 감지, 거리 약화 무시) - 6채널 모두 수신됐을 때만 체크 (BLE 거리 문제와 구분) - Placement: if(false) 제거 → 활성화 + "센서가 부착되지 않았습니다" - Monitoring: 정상 복귀 시 LED OFF Placement 가이드 모드: - Simple (기본): 3+채널 → 바로 좌우 (기존) - Boundary: 올라갔다 내려오기 패턴 (경계 감지 → 최적점 복귀) - 설정 톱니바퀴에 Simple/Boundary 스위치 BLE 로그: - 역순 표시 (최신이 위) — 스크롤 위치 유지 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -245,6 +245,7 @@ class BleManager private constructor(private val context: Context) {
|
||||
connectionTimer?.let { handler.removeCallbacks(it) }
|
||||
connectionTimer = null
|
||||
bluetoothGatt?.disconnect()
|
||||
com.example.medilightv2android.services.BleForegroundService.stop(context)
|
||||
}
|
||||
|
||||
fun disconnectAndUnbond() {
|
||||
@@ -252,6 +253,7 @@ class BleManager private constructor(private val context: Context) {
|
||||
cancelAutoReconnect()
|
||||
stopWatchdog()
|
||||
stopBatteryPolling()
|
||||
com.example.medilightv2android.services.BleForegroundService.stop(context)
|
||||
connectionTimer?.let { handler.removeCallbacks(it) }
|
||||
connectionTimer = null
|
||||
|
||||
@@ -274,7 +276,7 @@ class BleManager private constructor(private val context: Context) {
|
||||
connectedDeviceName.value = ""
|
||||
batteryLevel.value = 0
|
||||
lastConnectedAddress = null
|
||||
|
||||
|
||||
// Android 측 본딩 정보도 삭제
|
||||
device?.let { dev ->
|
||||
try {
|
||||
@@ -790,6 +792,7 @@ class BleManager private constructor(private val context: Context) {
|
||||
if (txCharacteristic != null && rxCharacteristic != null) {
|
||||
isServiceReady.value = true
|
||||
com.example.medilightv2android.services.AdcCsvLogger.newSession()
|
||||
com.example.medilightv2android.services.BleForegroundService.start(context)
|
||||
startBatteryPolling()
|
||||
startWatchdog()
|
||||
sendDeviceInfoQuery()
|
||||
|
||||
Reference in New Issue
Block a user