【发布时间】:2020-11-24 09:49:54
【问题描述】:
我希望监控我是否连接到特定的 SSID。在我的主要活动中,我正在初始化网络更改并希望在片段中观察结果,但这不起作用,在网络更改时我无法在片段中获得结果。
片段:
class ConnectFragment : Fragment() {
companion object {
fun newInstance() = ConnectFragment()
}
private lateinit var viewModel: SharedViewModel
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.connect_fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProvider(this).get(SharedViewModel::class.java)
viewModel.connected.observe(viewLifecycleOwner, {
Log.d(TAG, "Connected: $it")
})
}
}
SharedViewModel:
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class SharedViewModel : ViewModel() {
var connected= MutableLiveData(false)
}
主活动:
class MainActivity : AppCompatActivity() {
lateinit var viewModel:SharedViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
ViewModelProvider(this).get(SharedViewModel::class.java).also { viewModel = it }
}
override fun onSupportNavigateUp() =
findNavController(this, R.id.navHostFragment).navigateUp()
private val networkCallback: ConnectivityManager.NetworkCallback =
object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
Log.d(TAG, "Network Available")
super.onAvailable(network)
viewModel.connected.postValue(isConnectedToSSID())
}
}
private fun startNetworkCallback() {
val connectivityManager = application.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
connectivityManager.registerDefaultNetworkCallback(networkCallback)
}
private fun stopNetworkCallback() {
val connectivityManager = application.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
connectivityManager.unregisterNetworkCallback(networkCallback)
}
private fun isConnectedToSSID(): Boolean {
val wifiManager = getSystemService(WIFI_SERVICE) as WifiManager
val info = wifiManager.connectionInfo
val ssid = info.ssid.replace("\"", "")
return ssid.startsWith(WIFI_NETWORK) ?: false
}
override fun onResume() {
super.onResume()
startNetworkCallback()
}
override fun onPause() {
super.onPause()
try {
stopNetworkCallback()
} catch (e: Exception) {
}
}
}
【问题讨论】:
-
是没有收到networkCallback,还是viewModel没有更新的问题?
-
收到网络回调,viewModel 没有更新。
-
请添加
android-livedata标签 -
@Metrier,你的链接是我的问题。并且犯了同样的错误。谢谢!
标签: android