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
- 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.
- 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
- Ruta incorrecta en
android:namede 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
- Nombre de paquete incompatible: el applicationId de build.gradle no coincide con el nombre package del manifiesto
- 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)
- Problema de compilación: Fallo al compilar el proyecto, no se genera el archivo class; limpia y reconstruye el proyecto (Build -> Clean Project)
- Cuestión de mayúsculas:
MainactivityyMainActivityson dos clases distintas, Android distingue mayúsculas y minúsculas
Pasos sencillos de depuración
- 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> - Mantén pulsada la tecla Ctrl y haz clic en
.MainActivitypara comprobar si salta al código - No salta → Modifica
android:namecon el nombre completo de clase correcto - 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