4

场景一:

  1. 设备已加载
  2. 我添加第一个小部件
  3. OneX -> 调用 onEnabled | Galaxy Tab -> 不调用 onEnabled。

场景二:

  1. 设备已在屏幕上使用小部件启动。
  2. OneX -> 调用 onEnabled | Galaxy Tab -> Calls onEnabled

但是当用户在屏幕上放置一个时必须调用它(场景 1),否则有什么意义。当然,您不必重新启动设备即可调用 onEnabled。

它很重要,因为我附加了一个警报管理器以每 2 秒更新一次我的小部件:

    AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.add(Calendar.SECOND, 1);
    alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 1000, createClockTickIntent(context));

有一个类似的问题没有有效的解决方案:AppWidgetProvider: not called onEnabled method

无需注册这些意图,这样做也无济于事。

我的问题是为什么 onEnabled 不调用,我该如何调用它。

它在谷歌文档上说:ACTION_APPWIDGET_ENABLED:

当 AppWidget 的实例第一次添加到主机时发送。如果安装了带有此提供程序实例的 AppWidgetHost,则会在启动时发送此广播。

基本上确认它应该在两种情况下都有效

这是触发onEnabled()的意图

在实例化此提供程序的 AppWidget 时调用以响应 ACTION_APPWIDGET_ENABLED 广播。重写此方法以实现您自己的 AppWidget 功能。

它适用于手机而不是平板电脑的事实很奇怪。这是 android 3.2 的问题吗?有解决方法吗?

4

2 回答 2

1

在多次尝试找出它为什么会这样后,我做不到。

它要么是与 android 相关的问题,要么是与设备相关的问题,其中启用了小部件的广播永远不会发送。

使用警报管理器更新小部件的唯一解决方法是从它自己的方法初始化警报管理器,然后从onEnabledAND调用它onUpdate。因此,当它低于 时onEnabled,它将被 覆盖onUpdate,当小部件去更新自身时(在应用程序调用它时)。并且在场景onEnabled中确实有效,它只会在调用 onUpdate 时用新实例替换现有的警报管理器。

根据您在 onEnabled 中尝试执行的操作,可能不是理想的解决方案,但我能找到的唯一解决方案。

于 2012-10-08T10:36:42.973 回答
0

我还发现这非常不可靠,并使用广播侦听器解决了这个问题,用于启动完成事件。您还可以尝试其他回调(如 onUpdate())

于 2012-10-08T06:33:30.960 回答