Receptor de transmisión en Android con ejemplo

La transmisión en Android son los eventos de todo el sistema que pueden ocurrir cuando el dispositivo se inicia, cuando se recibe un mensaje en el dispositivo o cuando se reciben llamadas entrantes, o cuando un dispositivo pasa al modo avión, etc. Los receptores de transmisión se utilizan para responder a estos eventos de todo el sistema. Los receptores de difusión nos permiten registrarnos para los eventos del sistema y de la aplicación, y cuando ocurre ese evento, se notifica a los receptores de registro. Hay principalmente dos tipos de receptores de transmisión:

  • Receptores de transmisión estática: estos tipos de receptores se declaran en el archivo de manifiesto y funcionan incluso si la aplicación está cerrada.
  • Receptores de transmisión dinámica: estos tipos de receptores funcionan solo si la aplicación está activa o minimizada.

Dado que desde el nivel 26 de API, la mayor parte de la transmisión solo puede ser captada por el receptor dinámico, por lo que hemos implementado receptores dinámicos en nuestro proyecto de muestra que se muestra a continuación. Hay algunos campos estáticos definidos en la clase Intent que se pueden usar para transmitir diferentes eventos. Hemos tomado un cambio de modo de avión como un evento de transmisión, pero hay muchos eventos para los que se puede usar el registro de transmisión. Los siguientes son algunos de los intentos importantes generados en todo el sistema:

                      Intención

Descripción del evento

android.intent.action.BATTERY_LOW: Indica una condición de batería baja en el dispositivo.
android.intent.action.BOOT_COMPLETED Esto se transmite una vez que el sistema ha terminado de iniciarse
android.intent.action.CALL  Para realizar una llamada a alguien especificado por los datos
android.intent.action.DATE_CHANGED  Indica que la fecha ha cambiado
android.intent.action.REBOOT Indica que el dispositivo ha sido un reinicio
android.net.conn.CONECTIVITY_CHANGE La red móvil o la conexión wifi se cambia (o se reinicia)
android.intent.ACTION_AIRPLANE_MODE_CHANGED Esto indica que el modo avión se ha activado o desactivado.

Las dos cosas principales que tenemos que hacer para usar el receptor de transmisión en nuestra aplicación son:

Creación del receptor de difusión:

clase AviónModoChangeReceiver:BroadcastReceiver() {

       anula la diversión onReceive (contexto: ¿Contexto?, intención: ¿Intento?) {

            // la lógica del código debe escribirse aquí

      }

}
 

Registro de un BroadcastReceiver:

IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED).también {

                     // receptor es el receptor de emisión que hemos registrado

                    // y es el filtro de intenciones que hemos creado

                    registrarseReceptor(receptor,it)

      }
 

Ejemplo

A continuación se muestra el proyecto de muestra que muestra cómo crear el receptor de transmisión y cómo registrarlos para un evento en particular y cómo usarlos en la aplicación.

Paso 1: Crear un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio .

Paso 2: trabajar con el archivo activity_main.xml

Vaya al archivo activity_main.xml y consulte el siguiente código. A continuación se muestra el código para el  archivo activity_main.xml .

XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
</androidx.constraintlayout.widget.ConstraintLayout>

Paso 3: trabajar con el archivo MainActivity 

Vaya al archivo MainActivity y consulte el siguiente código. A continuación se muestra el código para el  archivo MainActivity . Se agregan comentarios dentro del código para comprender el código con más detalle. 

Kotlin

import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
 
class MainActivity : AppCompatActivity() {
 
    // register the receiver in the main activity in order
    // to receive updates of broadcasts events if they occur
    lateinit var receiver: AirplaneModeChangeReceiver
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
 
        receiver = AirplaneModeChangeReceiver()
 
        // Intent Filter is useful to determine which apps wants to receive
        // which intents,since here we want to respond to change of
        // airplane mode
        IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED).also {
            // registering the receiver
            // it parameter which is passed in  registerReceiver() function
            // is the intent filter that we have just created
            registerReceiver(receiver, it)
        }
    }
 
    // since AirplaneModeChangeReceiver class holds a instance of Context
    // and that context is actually the activity context in which
    // the receiver has been created
    override fun onStop() {
        super.onStop()
        unregisterReceiver(receiver)
    }
}

Java

import androidx.appcompat.app.AppCompatActivity;
 
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
 
public class MainActivity extends AppCompatActivity {
 
    AirplaneModeChangeReceiver airplaneModeChangeReceiver = new AirplaneModeChangeReceiver();
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
    @Override
    protected void onStart() {
        super.onStart();
        IntentFilter filter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED);
        registerReceiver(airplaneModeChangeReceiver, filter);
    }
 
    @Override
    protected void onStop() {
        super.onStop();
        unregisterReceiver(airplaneModeChangeReceiver);
    }
}

Paso 4: Crea una nueva clase 

Vaya a app > java > el nombre de su paquete (en el que está presente MainActicity) > haga clic con el botón derecho en > New > Kotlin File/Class y nombre los archivos como AirplaneModeChangeReceiver . A continuación se muestra el código para el  archivo AirplaneModeChangeReceiver . Se agregan comentarios dentro del código para comprender el código con más detalle. 

Kotlin

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.widget.Toast
 
// AirplaneModeChangeReceiver class extending BroadcastReceiver class
class AirplaneModeChangeReceiver : BroadcastReceiver() {
 
    // this function will be executed when the user changes his
    // airplane mode
    override fun onReceive(context: Context?, intent: Intent?) {
         
        // intent contains the information about the broadcast
        // in our case broadcast is change of airplane mode
 
        // if getBooleanExtra contains null value,it will directly return back
        val isAirplaneModeEnabled = intent?.getBooleanExtra("state", false) ?: return
         
        // checking whether airplane mode is enabled or not
        if (isAirplaneModeEnabled) {
            // showing the toast message if airplane mode is enabled
            Toast.makeText(context, "Airplane Mode Enabled", Toast.LENGTH_LONG).show()
        } else {
            // showing the toast message if airplane mode is disabled
            Toast.makeText(context, "Airplane Mode Disabled", Toast.LENGTH_LONG).show()
        }
    }
}

Java

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.provider.Settings;
import android.widget.Toast;
 
public class AirplaneModeChangeReceiver extends BroadcastReceiver {
 
    @Override
    public void onReceive(Context context, Intent intent) {
 
        if (isAirplaneModeOn(context.getApplicationContext())) {
            Toast.makeText(context, "AirPlane mode is on", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(context, "AirPlane mode is off", Toast.LENGTH_SHORT).show();
        }
    }
 
    private static boolean isAirplaneModeOn(Context context) {
        return Settings.System.getInt(context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
    }
}

Producción:

Publicación traducida automáticamente

Artículo escrito por lavishgarg26 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *