每当我在手机上重新创建主屏幕小部件时,都不会调用 onReceive() 方法。
问题是它没有响应我分配的按钮按下它的功能驻留在 onReceive 方法中..
问题不在模拟器上,但是当我用手机测试它时,它没有响应。
什么是最好的解决方案?
每当我在手机上重新创建主屏幕小部件时,都不会调用 onReceive() 方法。
问题是它没有响应我分配的按钮按下它的功能驻留在 onReceive 方法中..
问题不在模拟器上,但是当我用手机测试它时,它没有响应。
什么是最好的解决方案?
由于您没有更多详细信息(可能是有关如何注册接收者以及如何绑定待处理意图的一些源代码)。可能您的手机是带有滑动键盘的型号,或者那些主屏幕可以改变方向。因为当主屏幕的屏幕方向改变(或任何硬件配置)时,主屏幕会膨胀并重新创建。因此,对于您的按钮,最初绑定到它的意图在重新创建后就消失了。根据文档(抱歉,找不到链接),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 将仅根据上次更新进行更新,没有指定关于点击意图的任何信息。
对此的解决方案是,每次更新远程视图时,您还必须设置所有待处理的意图。我不确定它会如何影响性能,但这是我可以拥有的唯一工作方法。(但我的小部件以每秒 16 次的速度更新,至少它可以工作:)