我的小部件未使用 AppWidgetManager 更新,我该如何修复它?

问题描述 投票:0回答:1

我有一个可以通过按钮更新的小部件。单击该按钮时,所有字段中的值都会相应更新。这是onReceive方法代码:

override fun onReceive(context: Context, intent: Intent) {
        super.onReceive(context, intent)

        if(intent.action == UPDATE_BUTTON_ACTION) {
            val widgetManager = AppWidgetManager.getInstance(context)
            val widgetIds = widgetManager.getAppWidgetIds(ComponentName(context, AllServerInformationWidget::class.java))
            onUpdate(context, widgetManager, widgetIds)
        }
    }

代码相应地工作,但内容是通过 onUpdate 函数更新的,而不是通过 widgetManager 函数,即 updateAppWidget。我想在用户与界面交互时更新应用程序本身的内容,但正如您可以猜到的那样,什么也没有发生。

这是应该更新小部件的代码片段:

val widgetManager = AppWidgetManager.getInstance(context)
val widgetIds = widgetManager.getAppWidgetIds(ComponentName(requireContext(), AllServerInformationWidget::class.java))

if(widgetIds.isNotEmpty()) {
    val remoteViews = RemoteViews(requireContext().packageName, R.layout.all_server_information_widget)
    widgetManager.updateAppWidget(widgetIds, remoteViews)
}

我尝试了 ComponentName 和 RemoteViews 类构造函数的不同变体,但没有任何帮助。

android kotlin android-widget
1个回答
0
投票

我找到了解决办法。刷新按钮使用pendingIntent工作,我决定您也可以创建相同的实例,仅在创建后立即调用。

val intent = Intent(context, AllServerInformationWidget::class.java)
intent.action = AllServerInformationWidget.UPDATE_BUTTON_ACTION
intent.flags = Intent.FLAG_RECEIVER_FOREGROUND // This flag is needed to eliminate button delay
val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE)
pendingIntent.send()
© www.soinside.com 2019 - 2024. All rights reserved.