0

我正在寻找有关如何将 Android 网络服务发现 (NSD) 与 MVVM / ViewModels 一起使用的建议。

我已经成功地构建了一个基本的 NsdManager 应用程序,基本上是将Android 官方页面中的示例代码剪切并粘贴到 MainActivity 中:

// Instantiate a new DiscoveryListener
   private val discoveryListener = object : NsdManager.DiscoveryListener {

// Called as soon as service discovery begins.
   override fun onDiscoveryStarted(regType: String) {  // ...etc...

  override fun onStartDiscoveryFailed(serviceType: String, errorCode: Int) {
        Log.e(TAG, "Discovery failed: Error code:$errorCode")
        nsdManager.stopServiceDiscovery(this)  // ...etc....

我的基本应用程序有效,但我没有将大量代码转储到我的 MainActivity 中,而是尝试采用“最佳实践”并应用 MVVM

如果我理解,这意味着让 ViewModel 告诉 nsdManager 开始发现服务。即在我的 ViewModel 中有这样的代码

nsdManager.discoverServices(SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, discoveryListener)

稍后,我的 MainActivity 视图可以与 ViewModel 交互(可能通过 LiveData?)以显示已发现的服务列表。

但是,我立即被困在如何创建 ViewModel 可访问的 nsdManager 上。

在 MainActivity 我可以实例化一个类似这样的 nsdManager。

  val nsdManager: NsdManager? = context.getSystemService(Context.NSD_SERVICE) as NsdManager?

但是如果我理解(?)在 ViewModel 中有这样的代码会引入活动“上下文”依赖项 - 需要避免的事情。

我是一个 Android 新手,我完全有可能对 ViewModel 等应该如何工作有完全错误的想法

对于如何将 Android NSDManager 与 ViewModel 结合使用的任何建议(或更好的示例),我将不胜感激。

4

0 回答 0