android - 将数据从 BroadcastReceiver 发送到 ViewModel

标签 android kotlin broadcastreceiver kotlin-coroutines clean-architecture

我的第一个问题是我应该将 BroadcastReceiver 类放在整洁的架构项目中的哪里? (现在我把它放在数据层中)

我的项目包定义如下

├──data
   └──repositories
├──di
├──domain
   └── repository
   └── use_cases
├──presentation
├──utils

我的第二个问题是如何按照整洁的架构将 BroadcastReceiver 类中收到的数据发送/获取到 ViewModel ?

class ResponseReceiver: BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {  
      // received data 
    }
}

这是 list 文件中的声明

<receiver
    android:name=".data.ResponseReceiver"
    android:enabled="true"
    android:exported="true">
    ...
</receiver>

最佳答案

您可以将广播接收器放入数据包中。

使用 View 模型和存储库,您可以将广播接收器作为数据源添加到存储库中。从接收器获取数据并将其放入存储库中,并使用 View 模型将其提供给 UI。您可以使用this回答作为一些帮助,但他们遵循的方法是错误的。他们直接在 Activity 中访问存储库,这不是一个好的做法。您必须创建类似的函数才能从接收器获取数据。您将初始化 View 模型并从中访问 UI 中所需的所有内容,而不是在 Activity 内实例化存储库。这是因为你的唯一事实来源是 View 模型,如果你遵循 MVVM,那么它应该是这样的,我会为你的用例推荐这是一个很棒的架构。如果您需要一些代码来可视化,请随时询问。

关于android - 将数据从 BroadcastReceiver 发送到 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73199900/

相关文章:

java - 没有找到处理来自广播接收器的 Intent 的 Activity

android - 如何在 Android 11 上使用 Media Store API 获取隐藏文件夹中的文件

android - 类型错误 : Cannot read property 'DETECTION_MODE' of undefined - 'react-native-awesome-card-io'

找不到 Android 绑定(bind)适配器

android - e : [kapt] 'com.sun.tools.javac.util.Context' class can't be found ('tools.jar' is absent in the plugin classpath). Kapt 不起作用

android - 我正在从广播接收器开始一个 Activity ,但为什么我的其他 Activity 也开始了?

java - 在 BroadcastReceiver() 中检索调用上下文

java - 是否可以将图像从 Android 手机传递到 Java Servlet 进行处理并取回修改后的图像

android - 导入维基词典时出现构建错误

java - Mockiito返回值错误?