Cómo personalizar la transmisión residente en Android
Clasificación de las transmisiones de Android:
1. Transmisión ordinaria: este tipo de transmisión se puede transmitir a cada procesador por turno para su procesamiento.
2. Transmisión ordenada: el orden en el que el procesador maneja esta transmisión difiere según la prioridad del procesador. El procesador con alta prioridad interceptará el mensaje primero y podrá eliminarlo.
3. Mensajes fijos: los mensajes fijos siempre existen en el contenedor de mensajes del sistema después de ser enviados, esperando que el procesador correspondiente los procese. Si no hay ningún procesador para procesar el mensaje, siempre espera en el contenedor de mensajes.
Nota: Las transmisiones ordinarias son diferentes de los mensajes fijos, pero las transmisiones ordenadas pueden interceptarse.
Registro del procesador:
1. Utilice el código de función para registrarse dinámicamente en el código. Los controladores registrados dinámicamente deben ser destruidos dinámicamente mediante código y solo se puede usar un objeto de instancia para procesar mensajes a la vez.
2. Registro estático En el archivo de configuración, el registro estático tiene la característica de que una vez registrado siempre existirá en el sistema independientemente de si la aplicación está cerrada o abierta. Esto es sólo un virus de software fraudulento. Cada vez que se procesa un mensaje en el registro estático, el procesador del sistema lo procesa de nuevo y lo destruye.
Echemos un vistazo detallado al proceso de envío, registro y procesamiento de mensajes de transmisión de Android:
①Categoría de procesador personalizado:
Clase pública MyBroadcastReceiver4 extiende BroadcastReceiver {
Public MyBroadcastReceiver4() {
system . out . println("Se ha creado el receptor de transmisión registrado por el receptor de registro()"); p >
@Override
Anulación pública enReceive(contexto, intención intención){
cadena acción = intención obtener acción();
Sistema. out . println("MyBroadcastReceiver 4 recibió un mensaje "+action+"");
if (isOrderedBroadcast()) {
System.out.println("Esto es transmisión ordenada, ha sido interceptado ");
this. abortar transmisión();
} De lo contrario {
System.out.println("Esto no es cierto. transmisión de secuencia");
}
paquete paquete = intención. obtener extras();
if (paquete! = nulo) {
System.out.println("Los datos que contiene este mensaje son los siguientes:");
//Obtiene un conjunto de claves para el paquete.
set set = bundle . keyset();
//Obtiene el iterador de la colección anterior.
iterator iterator = set . iterator();
//Usa un iterador para recorrer la colección
while (iterator.hasNext()) { p>
//Obtener el contenido de la colección
String str =(String)iterator . next();
//Obtener el contenido del paquete
sistema . out . println(str+"-& gt;"+bundle . get(str));
}
}else{
System.out .println("Este mensaje no contiene datos");
}
Toasttoast = brindis. maketext(context, "MyBroadcastReceiver 4 recibió uno".
+acción + "mensaje", brindis. length_LONG);
toast.show();
// Interceptar este mensaje (eliminarlo del contenedor de mensajes) para que otros procesadores no puedan recibirlo.
this . abortar transmisión();
}
}
②Enviar un mensaje de transmisión.
(1). Enviar transmisión ordinaria:
//Enviar mensaje ordinario
Intent Intent = new Intent() set action(" asdfasdf "; );
Actividad de Android _ 09 _ 10. Esto. Enviar transmisión (intención);
(2) Enviar transmisión ordenada:
//Enviar con pedido. mensaje
Intención Intención = nueva Intención();
intención set action(" asdfasdf "); Android _ 09 _ 10 actividad .
null);
(3), enviar transmisión fija:
//Enviar mensaje fijo
Intent Intent = new Intent();< / p>
intención. set action(" qwerqwer "); actividad de Android _ 09 _ 10. sendstickybroadcast(intent);
③Registre el receptor de transmisión.
(1) Registro dinámico:
//Registrar receptor de transmisión.
filtro de intención filtro de intención = nuevo filtro de intención(" asdfasdf ");
filtro de intención establecido prioridad(0);
actividad de Android _ 09 _ 10; . this . registrar receptor (MBR 2,
filtro de intención);
(2) Registro estático:
& ltreceiver Android:name = ". mybroadcastreceiver 4. " & gt;
& ltFiltro de intención Android:priority = " 1000 " & gt;
& ltaction Android:name = " Acción de fondo de pantalla de Android _ CAMBIADO "/ &. gt;
& ltaction Android:name = " Android . proveedor . telefonía . SMS _ RECIBIDO "/& gt;
& ltaction Android:name = " Android . intención . acción . phone _ STATE "/& gt;
& ltaction Android:name = " Paquete de intención de Android _ REMOVED "/& gt;
//Esta oración se compara Especial, exclusivo del mensaje de difusión anterior.
& ltdata Android:scheme = " paquete "/& gt;
& ltcategory Android:name = " Android . intent . categoría . default "/& gt;
</intent-filter>
</receiver>
Cuando quieras enviar mensajes fijos, debes obtenerlos en el archivo de configuración Permisos:
& ltuses-permission Android:name = " Android . permiso . broadcast _ STICKY "/& gt;
Si desea utilizar un procesador personalizado para manejar las transmisiones del sistema, también se deben declarar los permisos de acceso en el archivo de registro, por ejemplo:
& ltuses-permission Android:name = " Android . permiso . recibir _ SMS "/& gt;
& ltuses-permission Android:name = " Android . permiso . leer _ TELÉFONO _ ESTADO "/& gt;