小部件仅在 2 次安装或重新启动后有效

widget only works after 2 installs or reboot

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

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

谢谢!

在您的代码中看到的唯一区别是您在更新小部件之前完成了 activity。 从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... 更改此行可解决您的问题。公关测试...

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

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

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

android:allowBackup="true"

Whether to allow the application to participate in the backup and restore infrastructure. If this attribute is set to false, no backup or restore of the application will ever be performed, even by a full-system backup that would otherwise cause all application data to be saved via adb. The default value of this attribute is true.

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

尝试将其设置为 false

相关问题:


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