es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Sigue pidiéndole al usuario que encienda el BT, hasta que lo haga.

En Android Studio:

¿Cómo puedo pedir al usuario que active el BT y esperar una respuesta más tarde?

Mi objetivo es pedir al usuario que encienda el BT, si lo rechaza, mostrar un mensaje Toast de error y seguir preguntando hasta que acepte.

Intenté:

private val REQUEST_ENABLE_BT = 0
...

Luego dentro de onCreate

val bluetoothAdapter: BluetoothAdapter? = BluetoothAdapter.getDefaultAdapter()

if (bluetoothAdapter == null) {
    Toast.makeText(this, "Dispositivo Bluetooth no disponible", Toast.LENGTH_LONG).show()
}

while (bluetoothAdapter?.isEnabled == false) {
    val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)
}

Y fuera atrapé la intención:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (resultCode == Activity.RESULT_CANCELED && requestCode == REQUEST_ENABLE_BT) {
        Toast.makeText(this, "Necesito BT", Toast.LENGTH_LONG).show()
    }
}

No da ningún problema de compilación, pero hace que el teléfono se bloquee.

Supongo que es debido al bucle while.

Probablemente haya mejores métodos como registerForActivityResult, pero aún así no funciona.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para solicitar al usuario que active el Bluetooth y esperar su respuesta más tarde, puedes usar el siguiente código en tu método onCreate():

    // Este código asume que ya has verificado la disponibilidad del Bluetooth 
    // y que has declarado REQUEST_ENABLE_BT como una constante de clase.
    
    val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
    
    if (!bluetoothAdapter.isEnabled) {
        val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
        startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)
    }
    

    Esto creará un intent para pedir al usuario que active el Bluetooth, y comenzará una actividad que le solicitará al usuario que lo habilite. Se utiliza el método startActivityForResult para que puedas recibir un resultado cuando el usuario responda a esta solicitud.

    Para manejar el resultado y mostrar un mensaje de error si el usuario no habilitó el Bluetooth, sobrescribe el método onActivityResult de esta manera:

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
    
        if (requestCode == REQUEST_ENABLE_BT) {
            if (resultCode == Activity.RESULT_OK) {
                Toast.makeText(this, "¡Bluetooth habilitado!", Toast.LENGTH_SHORT).show()
            } else {
                // Sigue preguntando hasta que el usuario habilite el Bluetooth
                val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
                startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)
            }
        }
    }
    

    Este método verifica si el resultado es de la solicitud de habilitación del Bluetooth, y si el código de resultado es RESULT_OK, significa que el usuario aceptó la solicitud y habilitó el Bluetooth. De lo contrario, seguirá preguntando al usuario que habilite el Bluetooth hasta que lo haga.

    Ten en cuenta que en esta implementación, no es necesario un bucle while ya que puede causar un bucle infinito que puede hacer que el teléfono se bloquee. Al utilizar startActivityForResult y el método onActivityResult, podemos manejar adecuadamente la respuesta del usuario a la solicitud de habilitación del Bluetooth.

Comments are closed.