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

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