Tutorial de notificaciones personalizadas de Android

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

Nombre de la aplicación:  Tutorial de notificación

Nombre del proyecto:  NotificaciónTutorial

Nombre del paquete:  com.androidbegin.notificationtutorial

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

Actividad principal .java

paquete com.androidbegin.notificationtutorial;

importar android.os.Bundle;
importar android.app.Actividad;
importar android.app.NotificationManager;
importar android.app.PendingIntent;
importar android.content.Intent;
importar android.support.v4.app.NotificationCompat;
importar android.view.Menú;
importar android.view.View;
importar android.view.View.OnClickListener;
importar android.widget.Button;
importar android.widget.RemoteViews;

clase pública MainActivity extiende Actividad {
	@Anular
	Vacío protegido onCreate (Paquete de estado de instancia guardado) {
		super.onCreate(estadoDeInstanciaGuardado);
		setContentView(R.layout.notificationmain);

		Botón bnotificar = (Botón) findViewById(R.id.notificación);

		Botón bcustomnotify = (Botón) findViewById(R.id.customnotification);

		bnotify.setOnClickListener(nuevo OnClickListener() {

			public void onClick (Ver arg0) {
				Notificación();
				// TODO stub de método generado automáticamente
			}
		});

		bcustomnotify.setOnClickListener(nuevo OnClickListener() {

			public void onClick (Ver arg0) {
				Notificación Personalizada();
				// TODO stub de método generado automáticamente
			}
		});

	}

	Notificación de vacío público () {
		// Establecer título de notificación
		String strtitle = getString(R.string.notificationtitle);
		// Establecer texto de notificación
		String strtext = getString(R.string.notificationtext);

		// Abrir la clase NotificationView al hacer clic en la notificación
		Intención intención = nueva intención (esto, NotificationView.class);
		// Enviar datos a la clase NotificationView
		intent.putExtra("título", strtitle);
		intent.putExtra("texto", strtext);
		// Abrir NotificationView.java Actividad
		PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent,
				PendingIntent.FLAG_UPDATE_CURRENT);

		//Crear notificación usando NotificationCompat.Builder
		Generador de NotificationCompat.Builder = nuevo NotificationCompat.Builder (esto)
				// Establecer icono
				.setSmallIcon(R.dibujable.logopequeño)
				// Establecer mensaje de teletipo
				.setTicker(getString(R.string.notificationticker))
				// Establecer título
				.setContentTitle(getString(R.string.notificationtitle))
				// Establecer texto
				.setContentText(getString(R.string.notificationtext))
				// 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) getSystemService (NOTIFICACIÓN_SERVICIO);
		// Crear notificación con el administrador de notificaciones
		administrador de notificaciones.notificar(0, constructor.construir());

	}

	public void CustomNotification() {
		// Uso de RemoteViews para enlazar diseños personalizados en Notificación
		RemoteViews remoteViews = new RemoteViews(getPackageName(),
				R.layout.notificación personalizada);

		// Establecer título de notificación
		String strtitle = getString(R.string.customnotificationtitle);
		// Establecer texto de notificación
		String strtext = getString(R.string.customnotificationtext);

		// Abrir la clase NotificationView al hacer clic en la notificación
		Intención intención = nueva intención (esto, NotificationView.class);
		// Enviar datos a la clase NotificationView
		intent.putExtra("título", strtitle);
		intent.putExtra("texto", strtext);
		// Abrir NotificationView.java Actividad
		PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent,
				PendingIntent.FLAG_UPDATE_CURRENT);

		Generador de NotificationCompat.Builder = nuevo NotificationCompat.Builder (esto)
				// Establecer icono
				.setSmallIcon(R.dibujable.logopequeño)
				// Establecer mensaje de teletipo
				.setTicker(getString(R.string.customnotificationticker))
				// Descartar notificación
				.setAutoCancel(verdadero)
				// Establecer PendingIntent en Notificación
				.setContentIntent(pIntent)
				// Establecer RemoteViews en Notificación
				.setContent(vistasremotas);

		// Ubique y establezca la imagen en customnotificationtext.xml ImageViews
		RemoteViews.setImageViewResource(R.id.imagenotileft,R.drawable.ic_launcher);
		remoteViews.setImageViewResource(R.id.imagenotiright,R.drawable.androidhappy);

		// Ubique y configure el texto en customnotificationtext.xml TextViews
		remoteViews.setTextViewText(R.id.title,getString(R.string.customnotificationtitle));
		remoteViews.setTextViewText(R.id.text,getString(R.string.customnotificationtext));

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

	}

	@Anular
	public boolean onCreateOptionsMenu(Menú menú) {
		// Inflar el menú; esto agrega elementos a la barra de acción si está presente.
		getMenuInflater().inflate(R.menu.actividad_principal, menú);
		devolver verdadero;
	}

}

Hemos creado dos botones en esta aplicación, el primer botón mostrará una notificación simple y el otro mostrará una notificación personalizada. Ambas notificaciones se crean mediante NotificationCompat.Builder . El uso  de NotificationCompat.Builder le permite crear su aplicación por debajo de la versión 4.1 de Android. Un PendingIntent permite hacer clic en las notificaciones o abrir una nueva actividad. Hemos preparado una imagen de notificación personalizada de muestra para este tutorial. Pon tus imágenes de muestra descargadas en tu  res  >  drawable-hdpi.

Imagen de muestra

A continuación, cree un diseño gráfico de archivo XML para su MainActivity. 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ón principal.xml  y pegue el siguiente código.

notificaciónprincipal.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"
    herramientas_context=".Actividad principal" >

    <Botón
        android_id="@+id/notificación"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_centerInParent="verdadero"
        android_text="@cadena/notificación" />

    <Botón
        android_id="@+id/notificación personalizada"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_centerInParent="verdadero"
        android_layout_below="@+id/notificación"
        android_text="@cadena/notificación personalizada" />

</RelativeLayout>

Producción:

A continuación, cree un diseño gráfico XML para su notificación personalizada. 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  customnotification.xml  y pegue el siguiente código.

notificación personalizada.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" >

    <ImagenVista
        android_id="@+id/imagenotileft"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content" />

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

    <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/imagenotileft" />

    <ImagenVista
        android_id="@+id/imagenotiright"
        android_layout_width="wrap_content"
        android_layout_height="wrap_content"
        android_layout_alignParentRight="verdadero"
        Android: relleno = "10dp" />

</RelativeLayout>

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

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

Vista de notificación .java

paquete com.androidbegin.notificationtutorial;

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 {
	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 su NotificationView. 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>

Cambie el nombre de la aplicación y los textos en  strings.xml . Abra su  strings.xml  y pegue el siguiente código. Vaya a  res  >  valores  >  cadenas.xml

cadenas.xml

<?versión xml="1.0" codificación="utf-8"?>
<recursos>

    <string name="app_name">Tutorial de notificación</string>
    <string name="hello_world">¡Hola mundo!</string>
    <string name="menu_settings">Configuración</string>
    <string name="notificationtitle">Tutorial de notificación de Android</string>
    <string name="notificationtext">Texto de notificación</string>
    <string name="notificationticker">Marcador de notificaciones</string>
    <string name="customnotificationtitle">Tutorial de notificación de Android</string>
    <string name="customnotificationtext">Texto de notificación personalizado</string>
    <string name="customnotificationticker">Marcador de notificación personalizada</string>
    <string name="lbltitle">"Título: "</string>
    <string name="lbltext">"Texto: "</string>
    <string name="notificación">Notificación</string>
    <string name="customnotification">Notificación personalizada</string>

</recursos>

En su  AndroidManifest.xml , debemos declarar una actividad. Abra su  AndroidManifest.xml  y pegue el siguiente código.

AndroidManifest.xml

<?versión xml="1.0" codificación="utf-8"?>
<manifiesto xmlns_android="http://schemas.android.com/apk/res/android"
    paquete="com.androidbegin.notificationtutorial"
    android_versionCode="1"
    android_versionName="1.0" >

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

    <aplicación
        Android: permitir copia de seguridad = "verdadero"
        android_icono="@dibujable/ic_launcher"
        android_etiqueta="@cadena/nombre_aplicación"
        android_tema="@estilo/AppTheme" >
        <actividad
            android_nombre=".Actividad principal"
            android_etiqueta="@cadena/nombre_aplicación" >
            <intent-filter>
                <acción android_name="android.intent.action.MAIN" />

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

</manifiesto>