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
メソッドを使用して、
です。そのためには、Terraform の
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
を使用します。
型指定された Key-Value ペアを作成する API。たとえば、クリックされた
destination:
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 // ... } }