Android appWidgetProvider onEnabled从未在平板电脑上调用过

时间:2012-09-28 15:14:58

标签: android android-intent widget appwidgetprovider

情景1:

  1. 设备已加载
  2. 我添加第一个小部件
  3. OneX - >调用onEnabled | Galaxy Tab - >不会打电话给启用。
  4. 情景2:

    1. 设备已在屏幕上显示小部件。
    2. OneX - >调用onEnabled | Galaxy Tab - >调用onEnabled
    3. 但是当用户在屏幕上放置一个(场景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()

      的意图
        

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

      它在手机上工作的事实,而不是平板电脑,很奇怪。它是Android 3.2的一个问题,是否有解决方法?

2 个答案:

答案 0 :(得分:1)

经过多次尝试找到它为什么这样做之后,我做得很短。

这是与Android相关的问题或与设备相关的问题,其中小部件启用的广播永远不会被发送。

使用警报管理器更新窗口小部件的唯一方法是使用自己的方法初始化警报管理器,然后从onEnabledonUpdate调用它。因此,当它不到onEnabled时,它将由onUpdate覆盖,当小部件进行自我更新时(在应用程序调用它时)。在方案onEnabled确实有效的情况下,只有在调用onUpdate时,它才会用新实例替换现有的警报管理器。

可能不是理想的解决方案,取决于您在onEnabled中尝试做什么,但这是我能找到的唯一一个。

答案 1 :(得分:0)

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