为什么我的Android主屏幕应用小部件无法正常工作?

时间:2018-08-14 15:40:58

标签: java android firebase android-appwidget

我正在为聊天应用程序制作主屏幕小部件。我创建了一个 Widget Provider 和一个 WidgetConfigurationActivity 。 当我创建“主页”窗口小部件时,配置将显示登录用户的所有可用聊天记录,并且当选择一个窗口小部件时,该窗口小部件应显示为另一聊天用户的图像。然后, PendingIntent 应打开正确的 ChatActivity 。 为此,我需要3个可以从 Firebase数据库中恢复的字符串值:

  • ImageThumb-Firebase存储映像的URL
  • ChatterUserName-其他聊天者的名字
  • list_user_id-从中检索消息的聊天者的Uid 数据库

这里是 my GitHub repo

我将1个字符串另存为 SharedPref ,并使用Paper Library保存2个字符串。

创建第一个小部件时,一切正常。

我检索所有字符串,创建正确的 RemoteView ,并意图使用正确的数据打开正确的聊天。

当我创建第二个小部件时会发生问题。

第二个窗口小部件的图像正确,但是当我单击它时,打开第一个窗口小部件的ChatActivity。

我已登录查看是否以正确的方式检索了所有数据

08-14 04:37:07.899 27778-27778/com.example.alessandro.mychatapp D/Constraints: onUpdate: appWidgetId: 331, listUserId: kcL4c30lnjhU36TBqhgJQox4dVk1, userName: Dj Maru, userThumb: https://firebasestorage.googleapis.com/v0/b/mychatapp-8a476.appspot.com/o/profile_images%2Fthumbs%2FkcL4c30lnjhU36TBqhgJQox4dVk1.jpg?alt=media&token=9a748bfe-1f39-44fa-9c29-38d5e60aaa86
08-14 04:37:07.910 27778-27778/com.example.alessandro.mychatapp D/Constraints: updateAppWidget: appWidgetId: 331, user_id: kcL4c30lnjhU36TBqhgJQox4dVk1, userName: Dj Maru, image: https://firebasestorage.googleapis.com/v0/b/mychatapp-8a476.appspot.com/o/profile_images%2Fthumbs%2FkcL4c30lnjhU36TBqhgJQox4dVk1.jpg?alt=media&token=9a748bfe-1f39-44fa-9c29-38d5e60aaa86
08-14 04:37:07.917 27778-27778/com.example.alessandro.mychatapp D/Constraints: onUpdate: appWidgetId: 332, listUserId: 9saSiY1WT0PNt6derLMsGBcZvJh2, userName: redjack, userThumb: https://firebasestorage.googleapis.com/v0/b/mychatapp-8a476.appspot.com/o/profile_images%2Fthumbs%2F9saSiY1WT0PNt6derLMsGBcZvJh2.jpg?alt=media&token=28d1b36c-6c43-454e-9ecd-cafca9cee994
08-14 04:37:07.920 27778-27778/com.example.alessandro.mychatapp D/Constraints: updateAppWidget: appWidgetId: 332, user_id: 9saSiY1WT0PNt6derLMsGBcZvJh2, userName: redjack, image: https://firebasestorage.googleapis.com/v0/b/mychatapp-8a476.appspot.com/o/profile_images%2Fthumbs%2F9saSiY1WT0PNt6derLMsGBcZvJh2.jpg?alt=media&token=28d1b36c-6c43-454e-9ecd-cafca9cee994

我还检查了WidgetConfigurationActivity中的 mAppWidgedId 值,以确保使用新的小部件创建了一个新的ID。

然后,如果我关闭或重启设备,第一个窗口小部件将停止工作……而第二个窗口小部件将正常运行

有人可以帮助我了解代码中的错误以及如何解决?非常感谢。 欢迎任何建议。

1 个答案:

答案 0 :(得分:1)

您必须在提供程序中使用views.setPendingIntentTemplate(...),而不是setOnClickPendingIntent,然后对小部件中的每个项目都具有唯一的onclick行为,然后必须为每个项目设置fillInIntent在填充每个项目的适配器中。

这里是Google Developers的链接:https://developer.android.com/guide/topics/appwidgets

如果还有其他问题,请随时问我:)

最好的问候, 拉兹洛