如何使用 livedata 从服务更新 UI?

2023-12-03

我正在创建播放器应用程序,我想为我的媒体播放器使用前台服务。我需要使用服务中的实时数据更新 UI。我已经阅读过有关使用广播接收器的信息,但我想使用 livedata。


假设您使用具有实时数据的服务,如下所示

class MusicService: Service() {
    companion object {
        const val STAT_PLAY = "playing"
        const val STAT_PAUSE = "pause"
        val playerStateLiveData = MutableLiveData<String>()
    }
    /*
     * your code here to implement play, pause, etc
     * */
     private fun playAt(duration: Int) {
         /*play music player logic*/
         //update live data
         playerStateLiveData.postValue(STAT_PLAY)
     }
     private fun pause() {
         /*pause music player logic*/
         //update live data
         playerStateLiveData.postValue(STAT_PAUSE)
     }
}

然后在您的活动中,您可以将 MutableLiveData 转换为 LiveData 来获取更新

class MainActivity: AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main_activity)
        
        val liveData: LiveData<String> = MusicService.playerStateLiveData
        
        liveData.observe(this, { musicPlayerState ->
            //update main activity view based on state changed
        })
    }
}

我建议您使用 viewmodel 从服务获取可变的实时数据

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 livedata 从服务更新 UI? 的相关文章

随机推荐

  • “无法实例化名为 UITableViewCellContentView 的类”iPhone 3.1.2

    我已经为自定义 UITableView 单元创建了一个笔尖 并按照文档和不同的教程来解决此错误 并且它不会停止 我研究了这个错误 人们说这是当你 import 标头但没有添加框架时发生的 好吧 UIKit 是自动添加的 我删除并再次添加它以
  • 呈现图像裁剪界面

    我正在尝试设计一个用于在 iPhone 操作系统中裁剪图像的 UI 并怀疑我正在以困难的方式处理事情 我的目标与 Tapbots 二人组使用 Pastebot 所做的差不多 在该应用程序中 它们使源图像变暗 但提供可移动且可调整大小的裁剪视
  • 为什么 Dispatcher.BeginInvoke 会为 ThreadStart 解包 TargetInitationException 而不是为 Action 解包?

    考虑以下两个应用 1 public partial class MainWindow Window public MainWindow InitializeComponent this Dispatcher UnhandledExcepti
  • 如何在Django REST框架中注册用户?

    我正在编写 REST APIDjango REST 框架 该 API 将成为社交移动应用程序的后端 遵循教程后 我可以序列化所有模型 并且能够创建新资源并更新它们 我正在使用 AuthToken 进行身份验证 我的问题是 一旦我有了 use
  • WebRTC 与 PeerJS:iceConnectionState 已断开连接?

    我的每台机器上都有一个节点应用程序正在运行这个例子在本地主机上使用我制作的 PeerServer 密钥 当我尝试在两者之间发起呼叫时 连接就会建立 例如 接收方说它接到了发送方的呼叫 但是 媒体流也会启动 视频 div 中显示黑框 然后连接
  • HTTP 状态 500 - Servlet 执行引发异常

    我在 servlet 中调用 java 类时收到此错误 这是错误 type Exception report message Servlet execution threw an exception description The serv
  • UIButton 框架不会随着使用 Swift 5 的可访问性大字体而增加

    UIButton 标题 body 或 headline 的大辅助字体大小不会增加按钮的框架 而只会增加标题文本 从下面的截图中可以清楚地看到 约束只有顶部 前导和尾随 也在代码中我添加了两行 button adjustsImageSizeF
  • MySQL 中的排序/排序

    我在尝试对表格内容进行排序时遇到一些问题programs按列prog id它以以下格式保存每个程序的 id prog id 1 0 1 1 0 2 1 0 3 1 0 10 1 0 11 1 1 0 1 1 1 等 当我按 prog id
  • 在 unix shell 中更改目录(特殊字符)

    我的目录名称以 开头 怎么用cd进入呢 基本转义字符不起作用 cd smol bash cd invalid option cd usage cd L P e dir cd smol bash cd invalid option cd us
  • 如何更改引用 dll 复制到的位置?

    我正在使用一些库 并且添加了对该库 dll 的引用 并将 复制本地 设置为 true 但我想将dll的位置更改为exe文件夹中的子文件夹 而不是与exe一起 这怎么可能 thanks Update 我使用了以下构建后事件 如 Jon Ske
  • 将 Outlook 暂停指定时间

    我尝试在收到电子邮件 10 秒后运行 Outlook 代码 我尝试使用application wait但您似乎无法使用 Outlook 执行此操作 如何将 Outlook 暂停指定的时间 您可以创建一个 Sub 来模仿Application
  • 从简单列表创建下拉菜单

    我当前的列表如下所示 ul li a href Menu 1 a li li a href Submenu a a li li a href Submenu b a li li a href Submenu c a li li a href
  • 使用 Django REST 框架 Render 返回图像

    我使用上传图像Django REST 框架 现在我试图返回与响应相同的图像 views py class ImageUploadView viewsets ModelViewSet queryset ImageModel objects a
  • ASP.NET网站的BIN目录和引用

    想象一下以下解决方案 网站 ABC com 非 Web 应用程序 BLL 单独程序集中的业务逻辑层 DTO 自己程序集中的 dto 对象 DAL 也在其自己的程序集中的数据访问层 BLL 引用了 DAL BLL 引用了 DTO 层 网站项目
  • 使用 CSS 缩小图像……图像在多个浏览器中变得模糊

    我在多个浏览器中遇到缩小 IMG 的问题 图像需要缩小 因为它们响应浏览器大小 这是我的代码 pic holder img moz transform rotate 0deg image rendering webkit optimize
  • Kubernetes 未知领域“行为”

    我正在 Kubernetes 中创建 Horizo ntalPodAutoscaler 我需要将缩减稳定窗口配置为小于默认值 使用的代码和错误如下 apiVersion autoscaling v2beta2 kind Horizontal
  • 在pyspark中不使用pivot进行分组的有效方法

    我有一个查询 需要使用 pyspark 计算内存利用率 我已经使用pivot 使用 python pandas 实现了这一点 但现在我需要在 pyspark 中执行此操作 而旋转将是一个昂贵的功能 所以我想知道 pyspark 中是否有任何
  • 绑定到 ItemsControl 中的 CurrentItem

    下面的 XAML 基本上是试图列出以下内容Buttons 由Name中对象的属性Views当前集合DataContext 当我点击一个按钮时CurrentItem的财产CollectionViewSource应该改变和相关的View应显示在
  • Spring Boot 过滤器调用了两次或根本没有调用

    我实现了一个自定义过滤器 它将请求的 cookie 中的一些内容添加到其标头中 Component Slf4j public class MyCustomFilter implements Filter Override public vo
  • 如何使用 livedata 从服务更新 UI?

    我正在创建播放器应用程序 我想为我的媒体播放器使用前台服务 我需要使用服务中的实时数据更新 UI 我已经阅读过有关使用广播接收器的信息 但我想使用 livedata 假设您使用具有实时数据的服务 如下所示 class MusicServic