@@ -98,9 +98,10 @@ final class AppRootManager: ObservableObject {
98
98
}
99
99
100
100
// 라이브 액티비티 시작 메서드
101
- func startLiveActivity( isWarning: Bool ) {
102
- // 항상 현재 `Live Activity` 상태를 확인하고 초기화
103
- isActivityActive = Activity< LiveActivityAttributes> . activities. isEmpty == false
101
+ func startLiveActivity( ) {
102
+ #if os(iOS) // iOS에서만 라이브 액티비티 실행
103
+ // 기존의 Live Activity가 활성화되어 있는지 확인
104
+ isActivityActive = !Activity < LiveActivityAttributes > . activities. isEmpty
104
105
105
106
guard !isActivityActive else {
106
107
print ( " 라이브 액티비티가 이미 활성화되어 있습니다. " )
@@ -114,9 +115,9 @@ final class AppRootManager: ObservableObject {
114
115
115
116
// attributes와 initialContentState를 선언
116
117
let attributes = LiveActivityAttributes ( name: " 주행 " )
117
- let initialContentState = LiveActivityAttributes . ContentState ( isWarning: isWarning )
118
+ let initialContentState = LiveActivityAttributes . ContentState ( isWarning: false )
118
119
119
- let content = ActivityContent ( state: initialContentState, staleDate: Date ( ) . addingTimeInterval ( 6 ) ) // 전체 6초
120
+ let content = ActivityContent ( state: initialContentState, staleDate: Date ( ) . addingTimeInterval ( 6 ) )
120
121
121
122
do {
122
123
let activity = try Activity< LiveActivityAttributes> . request(
@@ -125,101 +126,49 @@ final class AppRootManager: ObservableObject {
125
126
)
126
127
127
128
isActivityActive = true
128
- currentWarningState = isWarning
129
129
print ( " 라이브 액티비티가 시작되었습니다: \( activity. id) " )
130
130
} catch {
131
131
print ( " 라이브 액티비티 시작 실패: \( error) " )
132
132
}
133
+ #else
134
+ print ( " Apple Watch에서는 라이브 액티비티가 활성화되지 않습니다. " )
135
+ #endif
133
136
}
134
-
135
-
136
- // 라이브 액티비티 시작 메서드
137
- func startLiveActivity( ) {
138
- // 기존의 Live Activity가 활성화되어 있는지 확인
139
- isActivityActive = !Activity < LiveActivityAttributes > . activities. isEmpty
140
-
141
- guard !isActivityActive else {
142
- print ( " 라이브 액티비티가 이미 활성화되어 있습니다. " )
143
- return
144
- }
145
-
146
- guard ActivityAuthorizationInfo ( ) . areActivitiesEnabled else {
147
- print ( " 라이브 액티비티가 지원되지 않거나 비활성화되었습니다. " )
148
- return
149
- }
150
-
151
- // attributes와 initialContentState를 선언
152
- let attributes = LiveActivityAttributes ( name: " 주행 " )
153
- let initialContentState = LiveActivityAttributes . ContentState ( isWarning: false )
154
-
155
- let content = ActivityContent ( state: initialContentState, staleDate: Date ( ) . addingTimeInterval ( 6 ) )
156
-
157
- do {
158
- let activity = try Activity< LiveActivityAttributes> . request(
159
- attributes: attributes,
160
- content: content
161
- )
162
-
163
- isActivityActive = true
164
- print ( " 라이브 액티비티가 시작되었습니다: \( activity. id) " )
165
- } catch {
166
- print ( " 라이브 액티비티 시작 실패: \( error) " )
167
- }
137
+
138
+ // 라이브 액티비티 종료 메서드
139
+ func stopLiveActivity( ) {
140
+ guard !Activity < LiveActivityAttributes > . activities. isEmpty else {
141
+ print ( " 라이브 액티비티가 이미 중지 상태입니다. " )
142
+ return
168
143
}
169
144
170
- // 라이브 액티비티 종료 메서드
171
- func stopLiveActivity( ) {
172
- guard !Activity < LiveActivityAttributes > . activities. isEmpty else {
173
- print ( " 라이브 액티비티가 이미 중지 상태입니다. " )
174
- return
175
- }
176
-
177
- Task {
178
- for activity in Activity< LiveActivityAttributes> . activities {
179
- await activity. end ( nil , dismissalPolicy: . immediate)
180
- print ( " 라이브 액티비티가 중지되었습니다: \( activity. id) " )
181
- }
182
- isActivityActive = false
183
- print ( " 모든 라이브 액티비티가 성공적으로 중지되었습니다. " )
145
+ Task {
146
+ for activity in Activity< LiveActivityAttributes> . activities {
147
+ await activity. end ( nil , dismissalPolicy: . immediate)
148
+ print ( " 라이브 액티비티가 중지되었습니다: \( activity. id) " )
184
149
}
150
+ isActivityActive = false
151
+ print ( " 모든 라이브 액티비티가 성공적으로 중지되었습니다. " )
185
152
}
186
-
187
-
188
- // 오디오 및 ML 작업 중지 메서드
189
- func stopAudioAndMLTasks( ) {
190
- hornSoundDetector? . stopRecording ( )
191
- print ( " 오디오 수집 및 ML 예측 중지됨 " )
192
- }
193
-
194
- // 오디오 작업을 working 상태에서만 재개하는 메서드
195
- func resumeAudioTasksIfWorking( ) {
196
- if currentRoot == . working {
197
- hornSoundDetector? . startRecording ( )
198
- print ( " 오디오 수집 및 ML 예측 재개됨 (working 상태에서만) " )
199
- } else {
200
- print ( " 오디오 수집은 working 상태에서만 재개됩니다. " )
201
- }
202
-
203
153
}
154
+
204
155
205
156
// 오디오 및 ML 작업 중지 메서드
206
- func stopAudioAndMLTasks( ) {
207
- hornSoundDetector? . stopRecording ( )
208
- print ( " 오디오 수집 및 ML 예측 중지됨 " )
209
- }
210
-
211
- // 오디오 작업을 working 상태에서만 재개하는 메서드
212
- func resumeAudioTasksIfWorking( ) {
213
- if currentRoot == . working {
214
- hornSoundDetector? . startRecording ( )
215
- print ( " 오디오 수집 및 ML 예측 재개됨 (working 상태에서만) " )
216
- } else {
217
- print ( " 오디오 수집은 working 상태에서만 재개됩니다. " )
157
+ func stopAudioAndMLTasks( ) {
158
+ hornSoundDetector? . stopRecording ( )
159
+ print ( " 오디오 수집 및 ML 예측 중지됨 " )
218
160
}
219
161
162
+ // Working 상태에서만 오디오 작업 재개
163
+ func resumeAudioTasksIfWorking( ) {
164
+ if currentRoot == . working {
165
+ hornSoundDetector? . startRecording ( )
166
+ print ( " 오디오 수집 및 ML 예측 재개됨 (working 상태에서만) " )
167
+ } else {
168
+ print ( " 오디오 수집은 working 상태에서만 재개됩니다. " )
169
+ }
170
+ }
220
171
}
221
-
222
- }
223
172
// ContentView 정의 (AppRootManager 클래스 외부에 위치)
224
173
struct ContentView : View {
225
174
@ObservedObject var appRootManager : AppRootManager
0 commit comments