简体   繁体   中英

Unable to update the UI using Broadcast Receiver(Kotlin)

I wanted to update the UI of My MainActivity when the bluetooth is On/Off

MainActivity

private val broadcastReceiver = Broadcast()
    open var bluetooth : ImageView? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val filter = IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED)
        registerReceiver(broadcastReceiver, filter)
        val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
        bluetooth = findViewById(R.id.image_bluetooth)
        val bluetoothName = findViewById<TextView>(R.id.text_bluetooth_name)
        bluetoothName.text = bluetoothAdapter.name
        bluetooth?.setOnClickListener {
            if (!bluetoothAdapter.isEnabled) {
                val turnOn = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
                startActivityForResult(turnOn, 0)
            } else {
                bluetoothAdapter.disable()
            }
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        unregisterReceiver(broadcastReceiver)
    }

    fun enableBluetooth()
    {
        bluetooth?.setImageDrawable(ContextCompat.getDrawable(this,R.drawable.ic_bluetooth_enable_48dp))
    }
    fun disableBluetooth()
    {
        bluetooth?.setImageDrawable(ContextCompat.getDrawable(this,R.drawable.ic_bluetooth_disable_48dp))
    }

BroadcastReceiver

class Broadcast : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            val action = intent?.action
            val mainActivity = MainActivity()
            if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
                when (intent?.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR)) {
                    BluetoothAdapter.STATE_OFF -> {
                        Toast.makeText(context, "Bluetooth Turned OFF", Toast.LENGTH_LONG).show()
                        mainActivity.disableBluetooth()
                    }
                    BluetoothAdapter.STATE_ON -> {
                        Toast.makeText(context, "Bluetooth Turned ON", Toast.LENGTH_LONG).show()
                        mainActivity.enableBluetooth()
                    }
                }

            }
        }
    }

After the onReceive call in BroadcastReceiver, in enableBluetooth and disableBluetooth method bluetooth value return null.Can any one help to over come the process?Thanks in advance

For this case, use On onActivityResult Method to update the UI

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == 0 && bluetoothAdapter!!.isEnabled) {
            Toast.makeText(this, "Bluetooth Turned ON", Toast.LENGTH_LONG).show()
            image_bluetooth?.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_bluetooth_enable_48dp))
        }
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM