让服务与小部件通信

时间:2014-06-05 17:11:53

标签: android service android-widget

我有一项服务,我获取了某种状态,并将该状态显示为通知。我还想在窗口小部件中显示此状态。我如何在服务和小部件之间进行通信?

3 个答案:

答案 0 :(得分:0)

最简单的方法是让服务在状态发生变化时发送广播并让小部件实现广播接收器。

发送广播的文档在这里:

http://developer.android.com/reference/android/content/Context.html(搜索sendBroadcast的页面)

BroadcastReciver的文档位于:http://developer.android.com/reference/android/content/BroadcastReceiver.html

答案 1 :(得分:0)

您可以使用AppWidgetManager更新小部件。

例如:

public class MyService extends IntentService {
    // ...

    private void updateWidgets() {
        AppWidgetManager widgetManager = AppWidgetManager.getInstance(this);

        // Get a list of widgets to update
        int[] widgetIds = widgetManager.getAppWidgetIds(new ComponentName(this, MyAppWidgetProvider.class);

        // Update the widgets
        RemoteViews updatedViews = // Create your new RemoteViews here
        widgetManager.updateAppWidget(widgetIds, updatedViews);
    }
}

答案 2 :(得分:0)

我最喜欢的方法是使用事件总线。这是我完成这项任务时遇到的最干净的方式。查看Roman Nurik的Muzei项目,了解他如何使用GreenRobot的框架。 https://github.com/romannurik/muzei/search?q=EventBus&ref=cmdform