【问题标题】:How to restart and update a widget from a system reboot android如何从系统重新启动android重新启动和更新小部件
【发布时间】:2012-01-07 10:48:24
【问题描述】:

我有一个成功运行的 appwidget。现在当手机重新启动时, 该小部件会丢失其所有数据并仅位于主屏幕上。因为当手机重新启动时我无法从广播接收器更新小部件,所以我创建了一个通知 这会导致小部件的配置活动。用户再次设置配置并离开配置活动后,没有任何效果;空闲的小部件仍然存在?(用户必须删除小部件并再次创建小部件)..假设我没有正确接收小部件 ID,或者我在广播接收器中做错了,并假设将所有代码移动到小部件方法中的onEnable?..我如何正确刷新小部件。请记住,所有小部件更新都是通过服务完成的。

顺便说一句,我在广播接收器中有此代码用于 boot_completed 操作:

public void onReceive(final Context context, Intent intent) {

        String  info = context.getResources().getString(R.string.restart_setting);

     int[] allids = AppWidgetManager.getInstance(context).getAppWidgetIds(new ComponentName(context, MyWidgetProvider.class));
        for(int appWidgetId:allids){

        NotificationManager mnotifyManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notify = new Notification(R.drawable.icon, "Weather Update", System.currentTimeMillis());
        notify.defaults = Notification.DEFAULT_SOUND;
        notify.defaults = Notification.DEFAULT_VIBRATE;

    Intent Settings = new Intent(context, WidgetConfigure.class);
    Settings.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);

        PendingIntent pending = PendingIntent.getActivity(context, 0, weatherSettings, PendingIntent.FLAG_ONE_SHOT);
        notify.setLatestEventInfo(context, "Weather Update", info, pending);
        notify.flags = Notification.FLAG_AUTO_CANCEL;
        notify.defaults = Notification.DEFAULT_ALL;
        mnotifyManager.notify(WEATHER_NOTIFICATION_ID , notify);
        }
    }   

【问题讨论】:

  • 我最近尝试将此代码移动到小部件周期中的 onEnabled() 中,但它仍然没有刷新小部件。有可能吗?..
  • 如果 appwidgetprovider 本身包含 onReceive 方法,则使用单独的广播
  • 你最好使用appwidgetprovider的onReceive来简单的处理id和widget的其他组件

标签: android android-widget


【解决方案1】:

我今天早上刚遇到同样的问题,并尝试通过听 boot_completion 意图来解决它。它不适用于小部件。这是我发现的。

  • 要获得重启通知,除了 boot_completed 和 android.permission.RECEIVE_BOOT_COMPLETED 的权限之外,您还需要收到 android.intent.action.ACTION_EXTERNAL_APPLICATION_AVAILABLE

  • 但事实是,不需要额外的意图。重启后,BroadcastReceiver 的onEnableonUpadate 无论如何都会被调用。

因此,我实施的解决方案将每个小部件的配置存储在一个文件中,小部件 ID 作为文件名的一部分。在接收者的onUpdate 中,我再次初始化小部件(使用点击监听器等等)

结果是,重启后需要一点时间,但小部件(所有)看起来都很好,并且可以正常工作。

【讨论】:

  • 我也是这样做的。
  • 好事需要时间:-)
  • 这是解决方案还是需要做其他事情?
  • 实际的解决方案是从“所以,我已经实现的解决方案......”这句话开始实现的。抱歉,我先描述了什么不起作用。
猜你喜欢
  • 2011-10-02
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
  • 2017-09-10
相关资源
最近更新 更多