Glance를 사용하면 Action
클래스를 통한 사용자 상호작용 처리가 간소화됩니다. Glance
Action
클래스는 사용자가 할 수 있는 작업을 정의하며, 개발자는
일어납니다. Action
을 적용할 수 있습니다.
GlanceModifier.clickable
메서드로 구성요소를 호출할 수 있습니다.
앱 위젯은 원격 프로세스에 있으므로 생성 시 작업이 정의됩니다.
실행은 원격 프로세스에서 일어납니다. 네이티브 RemoteViews
에서
이 작업은 PendingIntents
를 통해 실행됩니다.
이 페이지에는 다음 작업이 설명되어 있습니다.
를 통해 개인정보처리방침을 정의할 수 있습니다.활동 시작
사용자 상호작용에서 활동을 시작하려면
actionStartActivity
함수에 Button
함수를 추가하여
GlanceModifier.clickable
(..) 한정자를 사용하세요.
actionStartActivity
에서 다음 중 하나를 제공합니다.
- 타겟 활동 클래스
ComponentName
- 인텐트
Glance는 작업을 제공된 타겟과 함께 PendingIntent
로 변환합니다.
매개변수입니다. 다음 예에서 NavigationActivity
는
사용자가 버튼을 클릭합니다.
@Composable fun MyContent() { // .. Button( text = "Go Home", onClick = actionStartActivity<MyActivity>() ) }
서비스 시작
활동을 실행하는 것과 유사하게 사용자 상호작용 시 서비스를 시작할 때
(actionStartService
메서드)
actionStartService
에서 다음 중 하나를 제공합니다.
- 타겟 활동 클래스
ComponentName
- 인텐트
@Composable fun MyButton() { // .. Button( text = "Sync", onClick = actionStartService<SyncService>( isForegroundService = true // define how the service is launched ) ) }
방송 이벤트 전송
다음 중 하나를 사용하여 사용자 상호작용 시 브로드캐스트 이벤트를 전송합니다.
actionSendBroadcast
메서드:
actionSendBroadcast
에서 다음 중 하나를 제공합니다.
- 문자열 작업
ComponentName
- 인텐트
BroadcastReceiver
클래스
@Composable fun MyButton() { // .. Button( text = "Send", onClick = actionSendBroadcast<MyReceiver>() ) }
맞춤 작업 실행
Glance는 특정 타겟을 실행하는 대신 람다 작업이나
actionRunCallback
: UI 또는 상태 업데이트와 같은 작업 실행
사용자 상호작용입니다.
람다 작업 실행
람다 함수를 UI 상호작용의 콜백으로 사용할 수 있습니다.
예를 들어 람다 함수를 GlanceModifier.clickable
에 전달합니다.
특수키:
Text( text = "Submit", modifier = GlanceModifier.clickable { submitData() } )
또는 이를 지원하는 컴포저블의 onClick
매개변수에 전달합니다.
Button( text = "Submit", onClick = { submitData() } )
ActionCallback 실행
또는 actionRunCallback
메서드를 사용하여
사용자 상호작용입니다. 이를 위해
ActionCallback
:
@Composable private fun MyContent() { // .. Image( provider = ImageProvider(R.drawable.ic_hourglass_animated), modifier = GlanceModifier.clickable( onClick = actionRunCallback<RefreshAction>() ), contentDescription = "Refresh" ) } class RefreshAction : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { // TODO implement } }
사용자가 클릭하면 제공된 suspend onAction
메서드가
ActionCallback
가 호출되어 정의된 로직 (즉,
데이터 새로고침).
작업 수행 후 위젯을 업데이트하려면 새 인스턴스를 만들고
update
(..)를 호출합니다. 자세한 내용은 GlanceAppWidget 상태 관리를 참고하세요.
섹션으로 이동합니다.
class RefreshAction : ActionCallback { override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { // do some work but offset long-term tasks (e.g a Worker) MyAppWidget().update(context, glanceId) } }
작업에 매개변수 제공
작업에 추가 정보를 제공하려면 ActionParameters
를 사용하세요.
API를 사용하여 유형이 지정된 키-값 쌍을 만듭니다. 예를 들어 클릭된
연결 대상:
private val destinationKey = ActionParameters.Key<String>( NavigationActivity.KEY_DESTINATION ) class MyAppWidget : GlanceAppWidget() { // .. @Composable private fun MyContent() { // .. Button( text = "Home", onClick = actionStartActivity<NavigationActivity>( actionParametersOf(destinationKey to "home") ) ) Button( text = "Work", onClick = actionStartActivity<NavigationActivity>( actionParametersOf(destinationKey to "work") ) ) } override suspend fun provideGlance(context: Context, id: GlanceId) { provideContent { MyContent() } } }
그 아래에서 매개변수는 요청하여 타겟 활동에서 이를 가져오도록 허용합니다.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val destination = intent.extras?.getString(KEY_DESTINATION) ?: return // ... } }
매개변수는 ActionCallback
에도 제공됩니다. 정의된
Parameters.Key
를 사용하여 값을 검색합니다.
class RefreshAction : ActionCallback { private val destinationKey = ActionParameters.Key<String>( NavigationActivity.KEY_DESTINATION ) override suspend fun onAction( context: Context, glanceId: GlanceId, parameters: ActionParameters ) { val destination: String = parameters[destinationKey] ?: return // ... } }