Enviar difusión personalizada

1. Receptor de difusión personalizado MyBroadcastReceiver.java

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Hemos recibido nuestra difusión personalizada", Toast.LENGTH_LONG).show();
    }
}
Lenguaje del código: JavaScript (javascript)

2. Registrar el receptor en AndroidManifest.xml (archivo de manifiesto)

Añade dentro de la etiqueta <application>:

<receiver
    android:name=".MyBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="com.foxdevelop.www.broadcastdemo.MY_BROADCAST" />
    </intent-filter>
</receiver>
Lenguaje del código: HTML, XML (xml)

Punto clave: El nombre de action. La cadena Intent que usemos al enviar la difusión después debe coincidir totalmente con este valor

3. activity_main.xml Diseño (botón)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:id="@+id/btn_send"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Enviar difusión"/>
</LinearLayout>
Lenguaje del código: HTML, XML (xml)

4. MainActivity.java Actividad principal (enviar difusión al pulsar el botón)

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = findViewById(R.id.btn_send);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // La cadena action debe ser idéntica a la definida en el manifiesto
                Intent intent = new Intent("cn.bamn.www.broadcastdemo.MY_BROADCAST");
                sendBroadcast(intent);
            }
        });
    }
}
Lenguaje del código: JavaScript (javascript)

Difusión estándar vs Difusión ordenada

  1. Difusión estándar sendBroadcast() Difusión asíncrona. Todos los receptores la reciben casi al mismo tiempo, sin orden y no se puede interrumpir.
  2. Difusión ordenada sendOrderedBroadcast() Los receptores reciben la difusión según su prioridad. Los receptores anteriores pueden llamar a abortBroadcast() para detener la difusión, y los receptores posteriores no la recibirán.

Error mostrado en la imagen: Activity class ...MainActivity does not exist

Significado del error: El sistema no encuentra la clase MainActivity

Causas frecuentes

  1. Ruta incorrecta en android:name de la Activity dentro de AndroidManifest.xml (el más común)
    • El nombre del paquete no coincide con el nombre de clase, errores de mayúsculas/minúsculas
    • Formato: android:name=".MainActivity", el punto . significa dentro del paquete de la aplicación actual
    • Método de comprobación: Mantén pulsada la tecla Ctrl y haz clic en el nombre de clase en el IDE. Si salta a MainActivity, la ruta es correcta
  2. Nombre de paquete incompatible: el applicationId de build.gradle no coincide con el nombre package del manifiesto
  3. Archivo de clase perdido: MainActivity.java eliminado / nombre de archivo erróneo (El nombre de clase Java debe coincidir exactamente con el nombre del archivo, distingue mayúsculas y minúsculas)
  4. Problema de compilación: Fallo al compilar el proyecto, no se genera el archivo class; limpia y reconstruye el proyecto (Build -> Clean Project)
  5. Cuestión de mayúsculas: Mainactivity y MainActivity son dos clases distintas, Android distingue mayúsculas y minúsculas

Pasos sencillos de depuración

  1. Abre AndroidManifest.xml y busca el nodo de la actividad de lanzamiento<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
  2. Mantén pulsada la tecla Ctrl y haz clic en .MainActivity para comprobar si salta al código
  3. No salta → Modifica android:name con el nombre completo de clase correcto
  4. Salta correctamente → Ejecuta Clean Project, reconstruye y reinstala el APK

Nota: Presta atención en versiones nuevas de Android (API26+): El registro estático de difusiones implícitas tiene muchas limitaciones. Muchas difusiones implícitas del sistema no permiten registro estático. Sin embargo, las difusiones implícitas con action personalizada no tienen esta restricción y funcionan sin problemas. Este ejemplo se puede ejecutar directamente.

Enviar difusión personalizada

Deja una respuesta

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