Callback
Una devolución de llamada o callback no es más que una función que se pasa como parámetro y se ejecuta dado el caso de forma asíncrona. Vamos a hacer un ejemplo tomando como base el BroadcastReceiver del tema anterior.
Recepción de SMS y callback
En el tema anterior, mediante un BroadcastReceiver, se detectaba cuando el dispositivo recibía un SMS y se mostraba un Toast. Ahora vamos a hacer que comunique esta llegada a la actividad principal mediante un callback y lo muestre en un TextView.
Pasos que se deben seguir:
1. Crear la interface en el BroadcastReceiver:
public interface Respuesta {
//Los métodos en las interfaces solo están declarados
public void onRespuesta(String s);
}
2. En el método onReceive(), definir la variable respuesta:
...
respuesta = (Respuesta) context;
respuesta.onRespuesta("Callback!!");
...
3. En la actividad principal, definir la interface:
public class MainActivity extends AppCompatActivity implements Receptor.Respuesta {
...
}
4. En la actividad principal, implementar el método:
@Override
public void onRespuesta(String s) {
textView.setText(s);
}
Y con esto debería de comunicar el BroadcastReceiver cuando recibe un mensaje a una actividad, en este caso la actividad Main.
Nota: Cuando registramos el BroadcastReceiver desde el código java tal que así:
Receptor receptor = new Receptor();
IntentFilter filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
this.registerReceiver(receptor, filter);
No es necesario volver a definirlo en el fichero manifiesto. Si se definen ambos se estarían registrando dos BroadcastReceiver provocando un malfuncionamiento.