如何将数据从服务传递到 Android 应用程序中的 HiltViewModel?

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

我有一个简单的视图模型类,其状态正在被函数修改

@HiltViewModel
class MapViewModel @Inject constructor() : ViewModel() {

    fun addNewLocation(location: Location) {
        val latLng = LatLng(location.latitude, location.longitude);
        state.value.coords?.add(latLng)
        state.value = state.value.copy(
            lastKnownLocation = location
        )
    }

    val state: MutableState<MapState> = mutableStateOf(
        MapState(
            lastKnownLocation = null,
            coords = mutableListOf<LatLng>()
        )
    )
}

还有一个渲染地图的

@Composable
组件,我想绘制一条折线,使用
coords
MapState
字段构建。

我正在前台服务中获取当前位置更新,该服务是从可以访问

viewModel

的主要活动类启动的
class MainActivity : ComponentActivity() {
      private val viewModel: MapViewModel by viewModels()
    // ...

但我无法参考服务中的

viewModel

每当服务获得新位置时,我如何更新

viewModel
的状态?

android kotlin android-service composable
1个回答
0
投票

您可以使用 LiveData 例如在单独的文件中定义一个 LiveData 对象

object LocationLiveData : LiveData<Location>()
然后在你的服务中,每当你有一个新的位置更新 LocationLiveData

的值
LocationLiveData.value = location

并在您的视图模型中观察 LocationLiveData 并更新视图模型的状态

LocationLiveData.observeForever { location ->
        addNewLocation(location)
    }
© www.soinside.com 2019 - 2024. All rights reserved.