窗口小部件仅在2次安装或重新启动后才能工作

时间:2018-09-17 12:53:41

标签: android widget onupdate

我的窗口小部件应用程序仅在安装窗口小部件并将其添加到屏幕然后再次安装时才有效,如果我添加了另一个窗口小部件,则必须再次安装才能使第二个窗口小部件开始工作(重启设备也有帮助,重新启动后,屏幕上的所有小部件都可以工作, 我有配置文件,但没有到达我的appWidgetProvider(操作是在onUpdate方法上设置的),如何强制我的APP从配置文件中更新窗口小部件?

我的整个项目: https://github.com/vlad1001/Widget

谢谢!

2 个答案:

答案 0 :(得分:2)

唯一的区别是代码上看到的是您在更新小部件之前已完成活动。 从documentation开始,将不会首次调用onUpdate方法。 我认为您必须添加以下内容:

super.onCreate(icicle);
setResult(RESULT_CANCELED);

删除此行:

setResult(RESULT_CANCELED, resultValue);

之后,将调用更改为在setResult和finish()之前更新:

        //make the update before finish()
        appWidgetManager.updateAppWidget(appWidgetId, views);

        Intent resultValue = new Intent();
        resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
        setResult(RESULT_OK, resultValue);
        finish();

我尚未重现您的问题,请让我知道是否适合您。

共享源代码后,基本问题是,在第一次创建时,您要向文本添加点击意图,而在更新时,您将待处理意图添加到imageView中。 更改此行可解决您的问题。在PR上测试...

views.setOnClickPendingIntent(R.id.example_widget_imageview, clickPendingIntent);

答案 1 :(得分:2)

我的第一枪。在您的项目中查看文件AndroidManifest.xml

有一行可能会导致您描述的问题。

android:allowBackup="true"
  

是否允许应用程序参与备份和还原基础结构。如果将此属性设置为false,则即使通过全系统备份也不会执行应用程序的备份或还原,否则将导致所有应用程序数据通过adb保存。此属性的默认值为true。

简而言之:卸载应用程序并不意味着您已经卸载了应用程序的内容和设置。

尝试将其设置为false

相关问题:https://stackoverflow.com/a/35296675/619673


替代方法:首次安装后,清除应用程序缓存,然后运行(或在终端adb shell pm clear <your.package.name中调用)。