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

iro*_*xxx 6 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);
        }
    }   
Run Code Online (Sandbox Code Playgroud)

jbo*_*boi 7

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

  • 要获得有关重启的通知android.intent.action.ACTION_EXTERNAL_APPLICATION_AVAILABLE,除了 boot_completed 和android.permission.RECEIVE_BOOT_COMPLETED.

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

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

结果是,重新启动后需要一些时间,但是小部件(所有)看起来不错并且按预期工作。

  • 好东西需要时间:-) (2认同)