每当我在手机上重新创建主屏幕小部件时,都不会调用onReceive()方法。
问题在于它没有响应按钮,我指定它的函数驻留在onReceive方法中。
问题不在于模拟器,但是当我用手机测试时,它没有响应它。
最佳解决方案是什么?
答案 0 :(得分:0)
因为你没有任何更详细的东西(可能是一些关于如何注册接收器的源代码以及如何绑定未决意图)。可能你的手机是带滑动键盘的型号,或者那些主屏幕可以改变方向。因为当主屏幕的屏幕方向改变(或任何硬件配置)时,主屏幕被膨胀并重新创建。因此,对于您的按钮,最初绑定到它的意图在重新创建后消失了。根据文档(抱歉,找不到链接),inflater只会从remoteviews获取最新的更新。因此,以下不工作:
RemoteViews rv = ...;
// Assign the button to some pending intent
rv.setOnClickPendingIntent(View, pi);
AppWidgetManager.Update(...);
// And after sometime, you make changes to the rv
rv.setFloat();
// And update again
AppWidgetManager.Update(...);
它仍然可以,按钮将按预期触发Pending Intent,但是,如果由于任何原因配置已更改且主屏幕无效(并重新创建),则appwidgetmanager将仅根据 last <更新< / em>更新,没有指定任何有关点击意图的内容。
解决方法是,每次更新远程视图时,都必须设置所有待处理的意图。我不确定它会如何影响性能,但它是我唯一可以使用的工作方法。 (但是我的小部件正在更新,如16次/秒,至少它可以工作:)