
🚀 개발일기: Wear OS Complication 클릭 시 앱 실행하기
오늘 Wear OS Complication을 탭했을 때, 내가 만든 워치 앱이 실행되도록 하는 기능을 구현했습니다. 이 기능은 사용자가 워치 페이스에서 바로 앱으로 진입할 수 있게 해주는 중요한 인터랙션입니다.
✨ 핵심 아이디어: `PendingIntent` 사용하기
Complication을 클릭해서 앱을 실행하려면, Complication 데이터에 `PendingIntent`라는 특별한 객체를 연결해야 합니다. 이 `PendingIntent`는 사용자가 Complication을 탭했을 때 시스템이 내 앱의 특정 부분을 대신 실행해 줄 수 있도록 하는 '권한' 같은 것입니다.
🛠️ 코드 수정 방법 (`MainComplicationService.kt`)
Complication 데이터를 생성하는 MainComplicationService.kt 파일의 createComplicationData 함수를 수정해야 합니다.
1. 필요한 `import` 추가
파일 상단에 다음 두 줄을 추가해주세요:
import android.content.Intent
import android.app.PendingIntent
import com.billcorea.habit1007.MainActivity // 당신의 워치 앱 메인 Activity 경로
✅ com.billcorea.habit1007.MainActivity는 당신의 실제 워치 앱의 MainActivity 경로로 변경해야 합니다.
2. `createComplicationData` 함수 수정
createComplicationData 함수 내에서 다음처럼 `Intent`와 `PendingIntent`를 만들고 `tapAction`에 연결합니다.
private fun createComplicationData(text: String, contentDescription: String): ComplicationData {
// 1. Complication을 탭했을 때 실행할 Intent를 만듭니다.
val intent = Intent(this, MainActivity::class.java).apply {
// 앱이 새 태스크(Task)에서 시작되도록 플래그를 추가합니다.
// Complication에서 앱을 시작할 때 일반적으로 권장됩니다.
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
// 2. 이 Intent를 PendingIntent로 감싸서, 워치 페이스가 나중에 실행할 수 있도록 합니다.
// '0'은 요청 코드 (여러 PendingIntent를 만들 때 다르게 지정).
// FLAG_IMMUTABLE은 Android 12(API 31) 이상에서 반드시 필요합니다.
val pendingIntent = PendingIntent.getActivity(
this,
0, // 요청 코드
intent,
PendingIntent.FLAG_IMMUTABLE // Android 12 이상 필수
)
// 3. ComplicationData에 위에서 만든 PendingIntent를 tapAction으로 설정합니다.
return ShortTextComplicationData.Builder(
text = PlainComplicationText.Builder(text).build(),
contentDescription = PlainComplicationText.Builder(contentDescription).build()
)
.setTapAction(pendingIntent) // 여기에 tapAction을 추가합니다!
.build()
}
⚠️ PendingIntent.FLAG_IMMUTABLE은 Android 12 (API 31) 이상을 타겟팅할 경우 필수입니다. 이 플래그를 넣지 않으면 앱이 충돌할 수 있습니다.
✅ 이제 완성입니다!
위 코드 수정 후 앱을 빌드하고 워치에 배포하면, Complication을 탭했을 때 당신의 MainActivity가 실행될 것입니다. 매우 간단하죠?
✨ 요약하자면?
Complication 클릭 시 앱을 실행하려면, MainComplicationService에서 Intent를 사용하여 실행할 Activity를 지정하고, 이를 PendingIntent로 변환한 뒤 ComplicationData의 setTapAction()에 연결하면 됩니다.
'모바일 앱(안드로이드)' 카테고리의 다른 글
| 🪄 Wear OS | Complication 탭 액션 구현 및 타일/칩 UI 정리 (1) | 2025.11.19 |
|---|---|
| 🦾 Android | 서식 캔버스 폼 - 이 앱 개발의 기본 지식 정리 (2) | 2025.11.17 |
| Android | Jetpack Compose로 Photo Picker 구현 (백포트 없이) (1) | 2025.11.13 |
| 개발일기: Wear OS Tile Chip 너비 문제 해결 (2) | 2025.11.11 |
| 🧠 Android | ViewModel에서 StateFlow로 상태 관리하기 (0) | 2025.10.30 |