场景 1:

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

  • 场景 2:
  • 设备启动时小部件已经在屏幕上。
  • OneX -> 调用 onEnabled | Galaxy Tab -> 调用 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

    没有必要注册这些 Intent ,这样做也无济于事。

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

    它在谷歌文档上说: ACTION_APPWIDGET_ENABLED:



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

    这是触发 onEnabled() 的 Intent



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

    最佳答案

    在多次尝试找出它为什么会这样行事之后,我得出了结论。

    它要么是与 android 相关的问题,要么是与设备相关的问题,其中从未发送启用小部件的广播。

    使用警报管理器更新小部件的唯一方法是从它自己的方法初始化警报管理器,然后从 onEnabled AND onUpdate 调用它。因此,当它低于 onEnabled 时,它​​将被 onUpdate 覆盖,当小部件自行更新时(在应用程序调用它时)。在 onEnabled 确实有效的情况下,它只会在调用 onUpdate 时用新实例替换现有的警报管理器。

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

    关于Android appWidgetProvider onEnabled 从未在平板电脑上调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12642754/

    10-13 04:13