Tutorial de notificación del receptor de transmisión de Android

Tutorial de notificación del receptor de transmisión de Android

En este tutorial, aprenderá cómo implementar un receptor de transmisión en su aplicación de Android. Broadcast Receiver es completamente asincrónico y se considera un proceso en primer plano y seguirá ejecutándose con el sistema Android. Crearemos una actividad que consiste en un ToggleButton y un CheckBox que enciende o apaga el Wifi y el receptor de transmisión. Se mostrará una notificación si el receptor de transmisión se enciende mientras se enciende o apaga el Wi-Fi. Vamos a empezar…

Descargue la biblioteca de soporte más reciente

Descargue la última revisión de la biblioteca de soporte 13

Enlace:  http://developer.android.com/tools/extras/support-library.html

Reemplace la biblioteca de soporte anterior ( android-support-v4.jar ) con la nueva biblioteca de soporte en su proyecto.

Cree un nuevo proyecto en Eclipse  File  >  New  >  Android Application Project. Complete los detalles y nombre su proyecto  BroadcastTutorial .

Nombre de la aplicación:  BroadcastTutorial

Nombre del proyecto:  BroadcastTutorial

Nombre del paquete:  com.androidbegin.broadcasttutorial

Abra su  MainActivity .java  y pegue el siguiente código.

Actividad principal .java

paquete com.androidbegin.broadcasttutorial;

importar android.net.ConnectivityManager;
importar android.net.wifi.WifiManager;
importar android.os.Bundle;
importar android.app.Actividad;
importar android.content.ComponentName;
importar android.content.Context;
importar android.content.pm.PackageManager;
importar android.view.Menú;
importar android.view.View;
importar android.view.View.OnClickListener;
importar android.widget.CheckBox;
importar android.widget.Toast;
importar android.widget.ToggleButton;

clase pública MainActivity extiende Actividad {
	// Declarar Variables
	Botón de alternancia wifitoggle;
	Casilla de verificación brcheckbox;

	@Anular
	public void onCreate (Paquete guardadoInstanceState) {
		super.onCreate(estadoDeInstanciaGuardado);
		// Obtener la vista de activity_main.xml
		setContentView(R.diseño.actividad_principal);

		// Localice el ToggleButton en activity_main.xml
		wifitoggle = (ToggleButton) findViewById(R.id.wifitoggle);

		// Localice el CheckBox en activity_main.xml
		brcheckbox = (CheckBox) findViewById(R.id.brcheckbox);

		// WifiManager para controlar el Servicio Wifi
		wifiManager final wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

		// Capturar clics en ToggleButton
		wifitoggle.setOnClickListener(nueva Vista.OnClickListener() {

			@Anular
			public void onClick(Ver v) {
				// TODO stub de método generado automáticamente
				si (wifitoggle.isChecked()) {
					// Activar Wi-Fi
					wifiManager.setWifiEnabled(verdadero);
				} más {
					// Apagar Wi-Fi
					wifiManager.setWifiEnabled(falso);
				}
			}
		});

		// Capturar clics en CheckBox
		brcheckbox.setOnClickListener(nuevo OnClickListener() {

			@Anular
			public void onClick(Ver v) {
				// TODO stub de método generado automáticamente
				si (brcheckbox.isChecked()) {
					// Encienda el receptor de transmisión
					PackageManager pm = MainActivity.this.getPackageManager();
					NombreComponente NombreComponente = new NombreComponente(
							MainActivity.this, BroadcastManager.class);
					pm.setComponentEnabledSetting(nombre del componente,
							PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
							PackageManager.DONT_KILL_APP);
					Toast.makeText(getApplicationContext(),
							"Receptor de transmisión iniciado", Toast.LENGTH_LONG)
							.mostrar();
				} más {
					// Apagar el receptor de transmisión
					PackageManager pm = MainActivity.this.getPackageManager();
					NombreComponente NombreComponente = new NombreComponente(
							MainActivity.this, BroadcastManager.class);
					pm.setComponentEnabledSetting(nombre del componente,
							PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
							PackageManager.DONT_KILL_APP);
					Toast.makeText(getApplicationContext(),
							"Receptor de transmisión detenido", Toast.LENGTH_LONG)
							.mostrar();

				}
			}
		});
		// Si Wi-Fi ya está encendido, cambie ToggleButton a encendido
		ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
		si (cm.getActiveNetworkInfo() != nulo
				&& cm.getActiveNetworkInfo().isAvailable()
				&& cm.getActiveNetworkInfo().isConnected()) {
			wifitoggle.setChecked(verdadero);
		}
	}

	// No usar el menú de opciones en este tutorial
	@Anular
	public boolean onCreateOptionsMenu(Menú menú) {
		getMenuInflater().inflate(R.menu.actividad_principal, menú);
		devolver verdadero;
	}
}

En esta actividad, hemos creado una palanca y un botón de casilla de verificación. Al hacer clic en el botón de alternar, se encenderán o apagarán los servicios wifi y al marcar o desmarcar la casilla de verificación, se iniciará o detendrá el receptor de transmisión.

A continuación, cree un diseño gráfico XML para su MainActivity. Vaya a  res  >  diseño  > Haga clic con el botón derecho en el  diseño  >  Nuevo  >  Archivo XML de Android

Nombre su nuevo archivo XML  activity_main.xml  y pegue el siguiente código.

actividad_principal .xml

<RelativeLayout xmlns_android="http://schemas.android.com/apk/res/android"
    xmlns_herramientas="http://esquemas.android.com/herramientas"
    android_layout_width="match_parent"
    android_layout_height="match_parent" >

    <Botón Alternar
        android_id="@+id/wifitoggle"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_centerHorizontal="verdadero"
        android_layout_centerVertical="verdadero"
        android_textOff="@cadena/wifioff"
        android_textOn="@cadena/wifion" />

    <Casilla de verificación
        android_id="@+id/brcasilla de verificación"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_below="@+id/wifitoggle"
        android_layout_centerHorizontal="verdadero"
        android_layout_centerVertical="verdadero"
        android_text="@cadena/BroadcastReceiver" />

</RelativeLayout>

Producción:

XML principal de BroadcastReceiver

A continuación, cree una clase de receptor de difusión. Vaya a  Archivo  >  Nuevo  >  Clase  y asígnele el nombre  BroadcastManager.java. Seleccione su paquete llamado  com.androidbegin. broadcasttutorial  y haga clic en  Finalizar .

Abra su  BroadcastManager .java  y pegue el siguiente código.

BroadcastManager.java

paquete com.androidbegin.broadcasttutorial;

importar android.app.NotificationManager;
importar android.app.PendingIntent;
importar android.content.BroadcastReceiver;
importar android.content.Context;
importar android.content.Intent;
importar android.net.ConnectivityManager;
importar android.net.NetworkInfo;
importar android.support.v4.app.NotificationCompat;

clase pública BroadcastManager extiende BroadcastReceiver {

	@Anular
	public void onReceive(Contexto contexto, Intención intención) {

		if (!isNetworkAvailable(contexto)) {
			Notificación (contexto, "Conexión wifi desactivada");

		} más {
			Notificación (contexto, "Conexión wifi activada");
		}

	}

	Notificación de vacío público (contexto de contexto, mensaje de cadena) {
		// Establecer título de notificación
		String strtitle = context.getString(R.string.notificationtitle);
		// Abrir la clase NotificationView al hacer clic en la notificación
		Intención intención = nueva intención (contexto, NotificationView.class);
		// Enviar datos a la clase NotificationView
		intent.putExtra("título", strtitle);
		intent.putExtra("texto", mensaje);
		// Abrir NotificationView.java Actividad
		PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent,
				PendingIntent.FLAG_UPDATE_CURRENT);

		// Crear notificación usando NotificationCompat.Builder
		Generador de NotificationCompat.Builder = new NotificationCompat.Builder(
				contexto)
				// Establecer icono
				.setSmallIcon(R.dibujable.logopequeño)
				// Establecer mensaje de teletipo
				.setTicker(mensaje)
				// Establecer título
				.setContentTitle(context.getString(R.string.notificationtitle))
				// Establecer texto
				.setContentText(mensaje)
				// Agregue un botón de acción debajo de la notificación
				.addAction(R.drawable.ic_launcher, "Botón de acción", pIntent)
				// Establecer PendingIntent en Notificación
				.setContentIntent(pIntent)
				// Descartar notificación
				.setAutoCancel(verdadero);

		// Crear administrador de notificaciones
		Administrador de notificaciones administrador de notificaciones = (Administrador de notificaciones) contexto
				.getSystemService(Contexto.NOTIFICACIÓN_SERVICIO);
		// Crear notificación con el administrador de notificaciones
		administrador de notificaciones.notificar(0, constructor.construir());

	}

	// Comprobar la disponibilidad de la red
	booleano privado isNetworkAvailable (contexto contexto) {
		ConnectivityManager connectionsManager = (ConnectivityManager) contexto
				.getSystemService(Context.CONECTIVITY_SERVICE);
		NetworkInfo activeNetworkInfo = administrador de conectividad
				.getActiveNetworkInfo();
		volver activeNetworkInfo != nulo;
	}

}

Broadcast Receiver comprueba la disponibilidad de la red de forma asíncrona. Entonces, si el wifi está encendido o apagado, la aplicación será notificada de inmediato y se mostrará una notificación.

Producción:

Notificación del receptor de transmisión

A continuación, cree una actividad para ver los resultados al hacer clic en la notificación. Vaya a  Archivo  >  Nuevo  >  Clase  y asígnele el nombre  NotificationView.java. Seleccione su paquete llamado  com.androidbegin.broadcasttutorial  y haga clic en  Finalizar .

Abra su  NotificationView .java  y pegue el siguiente código.

Vista de notificación .java

paquete com.androidbegin.broadcasttutorial;

importar android.app.Actividad;
importar android.app.NotificationManager;
importar android.content.Intent;
importar android.os.Bundle;
importar android.widget.TextView;

La clase pública NotificationView extiende la actividad {
    // Declarar variable
	Título de cadena;
    Cadena de texto;
    TextView txttítulo;
    Vista de texto texto de texto;

    @Anular
    public void onCreate (Paquete guardadoInstanceState) {
        super.onCreate(estadoDeInstanciaGuardado);
        setContentView(R.layout.notificationview);

        // Crear administrador de notificaciones
        Administrador de notificaciones administrador de notificaciones = (Administrador de notificaciones) getSystemService (NOTIFICACIÓN_SERVICIO);
        // Descartar notificación
        administrador de notificaciones.cancel(0);

        // Recuperar los datos de MainActivity.java
        Intención i = getIntent();

        título = i.getStringExtra("título");
        texto = i.getStringExtra("texto");

        // Localiza la vista de texto
        txttitle = (TextView) findViewById(R.id.title);
        txttext = (TextView) findViewById(R.id.text);

        // Establecer los datos en TextView
        txttitle.setText(título);
        txttext.setText(texto);
    }
}

A continuación, cree un diseño gráfico XML para ver una notificación. Vaya a  res  >  diseño  > Haga clic con el botón derecho en  diseño  >  Nuevo  >  Archivo XML de Android
Asigne un nombre a su nuevo archivo XML como  notificaciónview.xml  y pegue el siguiente código.

notificaciónview.xml

<?versión xml="1.0" codificación="UTF-8"?>
<RelativeLayout xmlns_android="http://schemas.android.com/apk/res/android"
    xmlns_herramientas="http://esquemas.android.com/herramientas"
    android_layout_width="fill_parent"
    android_layout_height="fill_parent" >

    <Vista de texto
        android_id="@+id/lbltitle"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_text="@cadena/lbltitle" />

    <Vista de texto
        android_id="@+id/lbltext"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_below="@+id/título lbl"
        android_text="@cadena/lbltext" />

    <Vista de texto
        android_id="@+id/título"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_toRightOf="@+id/lbltitle" />

    <Vista de texto
        android_id="@+id/texto"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
         android_layout_below="@+id/título"
        android_layout_toRightOf="@+id/lbltext" />

</RelativeLayout>

A continuación, cambie el nombre y los textos de la aplicación. Abra su  strings.xml  en su carpeta  res > valores  y pegue el siguiente código.

cadenas.xml

<recursos>

    <string name="app_name">Tutorial de transmisión</string>
    <string name="hello_world">¡Hola mundo!</string>
    <string name="menu_settings">Configuración</string>
    <string name="title_activity_main">Tutorial de transmisión</string>
    <string name="notificationtitle">Tutorial de transmisión</string>
    <string name="lbltitle">"Título: "</string>
    <string name="lbltext">"Texto: "</string>
    <string name="BroadcastReceiver">Receptor de transmisión</string>
    <string name="wifioff">WIFI APAGADO</string>
    <string name="wifion">WIFI ACTIVADO</string>

</recursos>

En su  AndroidManifest.xml , debemos declarar una actividad, un administrador de transmisión y permisos para permitir que la aplicación cambie el estado de wifi y la capacidad de acceder al estado de la red. Abra su  AndroidManifest.xml  y pegue el siguiente código.

AndroidManifest.xml

<manifiesto xmlns_android="http://schemas.android.com/apk/res/android"
    paquete="com.androidbegin.broadcasttutorial"
    android_versionCode="1"
    android_versionName="1.0" >

    <usos-sdk
        android_minSdkVersion="8"
        android_targetSdkVersion="15" />

    <usos-permiso android_name="android.permission.CHANGE_WIFI_STATE" />
    <usos-permiso android_name="android.permission.ACCESS_NETWORK_STATE" />

    <aplicación
        android_icono="@dibujable/ic_launcher"
        android_etiqueta="@cadena/nombre_aplicación"
        android_tema="@estilo/AppTheme" >
        <actividad
            android_nombre=".Actividad principal"
            android_label="@cadena/título_actividad_principal" >
            <intent-filter>
                <acción android_name="android.intent.action.MAIN" />

                <categoría android_name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </actividad>

        <receptor android_name=".BroadcastManager" >
            <intent-filter>
                <acción android_name="android.net.conn.CONECTIVITY_CHANGE" />
            </intent-filter>
        </receptor>

        <actividad android_name=".NotificationView" >
        </actividad>
    </aplicación>

</manifiesto>

Producción:

Captura de pantalla del receptor de transmisión

Código fuente 

[purchase_link id=”7962″ text=”Comprar para descargar el código fuente” style=”button” color=”green”]