小编Kar*_*rim的帖子

如何获取 Compose Glance 小部件的 AppWidgetId?

我有一个表,其中包含用户创建的所有小部件。我想使用相应的表条目自定义各个小部件,并在与小部件交互时更新相应的表条目。

uid 应用程序小部件ID 标题
0 23 第一个小部件
1 165 第二个小部件

(1) 当用户单击小部件时,我只想更新被单击的小部件的条目。在非 Glance 世界中,我通过向每个小部件添加一个 onClickListener 来实现此目的,如下所示:

val widgetView = RemoteViews(context.packageName, R.layout.widget_layout)
val widgetPendingIntent = ...
widgetView.setOnClickPendingIntent(R.id.appwidget_text, widgetPendingIntent)
val appWidgetManager = AppWidgetManager.getInstance(context)
appWidgetManager.updateAppWidget(appWidgetId, widgetView)
Run Code Online (Sandbox Code Playgroud)

在概览小部件中,我假设我需要使可组合项可单击,如下所示:

    @Composable
    override fun Content() {
        Column(
            modifier = GlanceModifier
                .fillMaxSize()
                .clickable(onClick = actionRunCallback<ClickOnWidget>())
        ) {
            Text(
                text = "Title",
                modifier = GlanceModifier.fillMaxSize(),
            )
        }
    }
Run Code Online (Sandbox Code Playgroud)

ActionCallback 看起来像这样:

class ClickOnWidget : ActionCallback {
    override suspend fun onRun(context: Context, glanceId: GlanceId, parameters: ActionParameters) {
       // Update my table …
Run Code Online (Sandbox Code Playgroud)

android android-widget android-jetpack-compose glance glance-appwidget

2
推荐指数
1
解决办法
1233
查看次数

如何从配置/主 Activity 更新 Compose Glance Widget 的 AppWidgetState?

我最新的想法是使用

updateAppWidgetState(context = context, definition = PreferencesGlanceStateDefinition, glanceId = glanceId) {
   // ...
}
Run Code Online (Sandbox Code Playgroud)

GlanceWidget().update(context = context, glanceId = glanceId)
Run Code Online (Sandbox Code Playgroud)

但我无权访问glanceId。

问题的背景是我想将 uid 添加到 AppWidgetState,如本问题所述:How to get the AppWidgetId of a Compose Glance widget?

我怎样才能获得glanceId(例如,从我在配置活动中有权访问的appWidgetId)或者我该如何实现这一点?

android-widget android-jetpack-compose glance glance-appwidget

2
推荐指数
1
解决办法
2132
查看次数