其他分享
首页 > 其他分享> > 如何从系统重新启动android重新启动和更新小部件

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

作者:互联网

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

解决方法:

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

>要获得有关重新启动的通知,除了boot_completed和android.permission.RECEIVE_BOOT_COMPLETED的许可之外,您还需要接收android.intent.action.ACTION_EXTERNAL_APPLICATION_AVAILABLE.
>但是,全部事实是,没有必要另外提出意图.重新启动后,无论如何都要调用BroadcastReceiver的onEnable和onUpadate.

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

结果是,重新启动后花了一点时间,但是小部件(全部)看起来不错,并且按预期工作.

标签:android-widget,android
来源: https://codeday.me/bug/20191201/2084274.html