如何从系统重启android重新启动和更新小部件

时间:2012-01-07 10:48:25

标签: android android-widget

我有一个成功运行的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);
        }
    }   

1 个答案:

答案 0 :(得分:3)

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

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

  • 但事实上,没有必要另外一个意图。重新启动后,无论如何都会调用BroadcastReceiver的onEnableonUpadate

因此,我实现的解决方案将每个窗口小部件的配置存储在一个文件中,窗口小部件ID作为文件名的一部分。在接收器的onUpdate中,我再次初始化小部件(使用单击侦听器和所有这些)

结果是,重新启动后需要一点时间,但小部件(全部)看起来很好并且工作得像预期的那样。