LiveData का उपयोग करके टुकड़े के अंदर नेटवर्क परिवर्तन का अवलोकन करना

Nov 24 2020

मैं मॉनिटर करना चाहता हूं कि क्या मैं विशिष्ट एसएसआईडी से जुड़ा हुआ हूं। अपनी मुख्य गतिविधि में मैं नेटवर्क परिवर्तन को इनिशियलाइज़ कर रहा हूँ और टुकड़े में परिणाम का निरीक्षण करना चाहता हूँ, लेकिन यह काम नहीं कर रहा है, नेटवर्क परिवर्तन I कैंट में परिणाम नहीं मिलता है।

टुकड़ा:

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")
        })
    }

}

साझा दृश्यमॉडल:

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) {
        }
    }
}

जवाब

Dim Nov 25 2020 at 23:11

समस्या मिली:

उपयोग करने की आवश्यकता:

viewModel = ViewModelProvider(requireActivity()).get(SharedViewModel::class.java)

इसके बजाए:

viewModel = ViewModelProvider(this).get(SharedViewModel::class.java)