当运行音乐播放器的服务实际开始播放时更新小部件的 Textview

Posted

技术标签:

【中文标题】当运行音乐播放器的服务实际开始播放时更新小部件的 Textview【英文标题】:updating Textview of a widget when a service that runs a music player actually started playing 【发布时间】:2017-12-17 07:22:01 【问题描述】:

我编写了一个音乐播放器服务 (MusicPlayer),它接受 2 个输入 1) 播放列表名称和 2) 每首歌曲/音频的路径。

这是完美的工作。

我有一个当前显示图像的应用小部件。我计划添加一个文本视图,以便显示当前播放的歌曲,并在播放新歌曲时更新。

无法弄清楚如何从服务更新小部件。

有没有办法可以访问小部件来更新所需的信息?

【问题讨论】:

检查这个:update textview title in an Activity from a service 【参考方案1】:

当然可以。

widgetProvider 本身就是一个广播接收器。所以为了和一个小部件通信,你只需要发送一个广播。

Intent intent = new Intent(this,YourWidgetProvider.class);
intent.putExtra("SONG","Your Song");
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
// Use an array and EXTRA_APPWIDGET_IDS instead of 
AppWidgetManager.EXTRA_APPWIDGET_ID,
// since it seems the onUpdate() is only fired on that:
int[] ids = widgetId;
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,ids);
sendBroadcast(intent);

在widgetprovider的onReceive方法中,可以从intent中提取需要的信息

参考:Programmatically update widget from activity/service/receiver

【讨论】:

谢谢。它有帮助。已实施并按预期工作。

以上是关于当运行音乐播放器的服务实际开始播放时更新小部件的 Textview的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 小部件显示在所有屏幕上

音乐播放器锁屏小部件 Android

如何有效地更新应用小部件

今日 iOS 8 小部件中的音乐播放器控件

Android 小部件+服务

Flutter:关闭应用程序后播放音乐