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