Android:通知到来时更新小部件

问题描述 投票:0回答:2

我正在开发一个小部件,显示未接来电的数量、新短信的数量、新邮件的数量和任何通知的数量。就像下面的图片链接一样:

https://1drv.ms/i/s!AnNwF6LmB2gQi34jxc_11yB703l8

但是为了避免电池耗尽,是否可以仅在收到任何通知时更新小部件?或者我必须创建一个寻找通知的后台服务?

android notifications widget
2个回答
0
投票

0
投票

这似乎是一个很好的解决方案(我正在使用 Xamarin)。

我有一个MainActivity.cs、一个AppWidget.cs和一个NotificationService.cs(用于NotificationListenerService)。

目前,我的小部件在我创建一个时更新一次,或者每 3000 万更新一次。我的 ListenerService 可以捕获通知发布或删除。

ListenerService 中的更新函数在捕获 post 或删除时被调用:

    void UpdateWidget()
    {
        RemoteViews view = new RemoteViews(PackageName, Resource.Layout.Widget);
        AppWidgetManager appWidgetManager = AppWidgetManager.GetInstance(context);
        ComponentName thisWidget = new ComponentName(context.PackageName, Class.Name);
        appWidgetManager.UpdateAppWidget(thisWidget, view);
    }

在我的appwidget.cs中,我有这个功能:

    public override void OnReceive(Context context, Intent intent)
    {
        switch (intent.Action)
        {
            default:
                {
                    Log.Info("YotaWMNofifier", "** OnReceive received intent: {0}", intent.Action);
                }
                break;

            case AppWidgetManager.ActionAppwidgetUpdate:
                {
                    Log.Info("YotaWMNofifier", "** OnReceive received intent: Update widget");
                    WidgetUpdater(context);
                }
                break;

            case AppWidgetManager.ActionAppwidgetDisabled:
                {
                    Log.Info("YotaWMNofifier", "** OnReceive received intent: Delete last widget");
                }
                break;

            case AppWidgetManager.ActionAppwidgetEnabled:
                {
                    Log.Info("YotaWMNofifier", "** OnReceive received intent: Create widget");
                    WidgetUpdater(context);
                }
                break;
        }
    }

我从来没有从 OnReceive 函数中获得 Log.info,但我从服务的 OnNotificationRemoved 和 OnNotificationPosted 中获得了它。

© www.soinside.com 2019 - 2024. All rights reserved.