Использование CoroutineWorker с виджетом Android в Jetpack Glance приводит только к индикатору загрузки.Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Использование CoroutineWorker с виджетом Android в Jetpack Glance приводит только к индикатору загрузки.

Сообщение Anonymous »

Я создал виджет Android с помощью Jetpack Glance, мне нужно обновить его с помощью CoroutineWorker, поэтому я использую для него WorkManager, вот пример кода

Код: Выделить всё

class MyWidget : GlanceAppWidget() {

companion object {
val KEY_TOPIC = stringPreferencesKey("topic")
val KEY_QUOTE = stringPreferencesKey("quote")
}

override val sizeMode = SizeMode.Exact

// override var stateDefinition: GlanceStateDefinition = PreferencesGlanceStateDefinition

override suspend fun provideGlance(context: Context, id: GlanceId) {

provideContent {

val displayText = currentState(KEY_QUOTE) ?: "Quote not found"
val topic = currentState(KEY_TOPIC) ?: ""

GlanceTheme {
Scaffold(
titleBar = {
TitleBar(startIcon = ImageProvider(R.mipmap.ic_launcher), title = "Hello")
}, backgroundColor = GlanceTheme.colors.widgetBackground
) {
Column(
modifier = GlanceModifier.background(color = Color.Red)
.padding(30.dp)
) {
Text(
text = "Display Text is $displayText &&  Topic is $topic",
style = TextStyle(
color = ColorProvider(
color = Color(0xFF000000)
),
fontSize = 12.sp,
fontWeight = FontWeight.Medium
),
modifier = GlanceModifier.clickable {
actionStartActivity(activity = MainActivity::class.java)
}
)

Button(
"Start Activity", onClick = actionStartActivity(),
style = TextStyle(
color = ColorProvider(
color = Color(0x00FF0000)
),
fontSize = 12.sp,
fontWeight = FontWeight.Medium
),
)
}
}

}
}
}

override fun onCompositionError(
context: Context,
glanceId: GlanceId,
appWidgetId: Int,
throwable: Throwable
) {
super.onCompositionError(context, glanceId, appWidgetId, throwable)
val remoteView = RemoteViews(context.packageName, R.layout.custom_error_layout)
Log.i("errorMessageis", "${throwable.message} ${throwable.localizedMessage}")
remoteView.setTextViewText(
R.id.textview,
"${throwable.message} ${throwable.localizedMessage}"
)
AppWidgetManager.getInstance(context).updateAppWidget(appWidgetId, remoteView)
}

}

@HiltWorker
class CustomWorker @AssistedInject constructor(
@Assisted val context: Context,
@Assisted workerParameters: WorkerParameters,
) : CoroutineWorker(context, workerParameters) {

override suspend fun doWork(): Result {

CoroutineScope(Dispatchers.IO).launch {
val currentTimeMillis = System.currentTimeMillis()
val date = Date(currentTimeMillis)
val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
val formattedDate = sdf.format(date)

val glanceIds =
GlanceAppWidgetManager(context).getGlanceIds(MyWidget::class.java)
glanceIds.forEach { id ->
updateAppWidgetState(context, id) { prefs ->
prefs[KEY_QUOTE] = currentTimeMillis.toString()
prefs[KEY_TOPIC] = formattedDate
}
MyWidget().update(context, id)
}
}
return Result.success()
}
}
Теперь, когда я пытаюсь создать виджет из установленного приложения для Android, он просто показывает экран загрузки, созданный из android:initialLayout="@layout/glance_default_loading_layout"
Вот полный исходный код
Я не вижу никаких сообщений об ошибках

Подробнее здесь: https://stackoverflow.com/questions/792 ... -just-a-lo
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»