traspas

Transcripción

traspas
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Android avanzado
Sesión 5: Notificaciones
© 2012-2013 Depto. Ciencia de la Computación e IA Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Puntos a tratar
• Notificaciones Toast
• Personalización
• Notificaciones de la Barra de Estado
• Configuración y uso
• Cuadros de Diálogo
• Diálogo de Alerta
• Diálogo de Confirmación
• Diálogo de Selección
© 2012-2013 Depto. Ciencia de la Computación e IA
2
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Notificaciones Toast
• Avisos, no requieren confirmación por parte del usuario.
• Apariencia por defecto o configurable.
• Duración: LENGTH_LONG (3.5 segundos)
LENGTH_SHORT (2 segundos)
btnDefecto.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Toast toast1 = Toast.makeText(getApplicationContext(),
"Toast por defecto", Toast.LENGTH_SHORT);
toast1.show();
}
});
© 2012-2013 Depto. Ciencia de la Computación e IA
3
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Notificaciones Toast
• Alineación:
• void setGravity(int gravity, int xOffset, int
yOffset)
• Gravity values: CENTER, LEFT, BOTTOM, ... o con alguna
combinación de éstas
btnGravity.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Toast toast2 = Toast.makeText(getApplicationContext(),
"Toast con gravity", Toast.LENGTH_SHORT);
toast2.setGravity(Gravity.CENTER|Gravity.LEFT,0,0);
toast2.show();
}
});
© 2012-2013 Depto. Ciencia de la Computación e IA
4
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Notificaciones Toast
• Personalizar apariencia, layout del Toast:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/lytLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:background="#555555"
android:padding="5dip" >
<ImageView android:id="@+id/imgIcono"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/marcador" />
<TextView android:id="@+id/txtMsg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textColor="#FFFFFF"
android:paddingLeft="10dip" />
</LinearLayout>
© 2012-2013 Depto. Ciencia de la Computación e IA
5
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Notificaciones Toast
• Personalizar apariencia, código:
btnLayout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0)
{
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toast_layout,
(ViewGroup) findViewById(R.id.lytLayout));
TextView txtMsg=(TextView)layout.findViewById(R.id.txtMsg);
txtMsg.setText("Toast Personalizado");
Toast toast3 = new Toast(getApplicationContext());
toast3.setDuration(Toast.LENGTH_SHORT);
toast3.setView(layout);
toast3.show();
}
});
© 2012-2013 Depto. Ciencia de la Computación e IA
6
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Notificaciones de la
Barra de Estado
© 2012-2013 Depto. Ciencia de la Computación e IA
7
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Notificaciones
•
•
•
•
•
•
Las Notification son el
mecanismo típico que utilizan los
servicios para comunicarse con
el usuario.
No roban el foco a la aplicación
actual.
Permanecen el tiempo que
haga falta hasta ser vistas o
descartadas.
Permiten mostrar distintos tipos
de información.
Pueden responder a la pulsación.
Se pueden actualizar.
© 2012-2013 Depto. Ciencia
de la Computación e IA
8
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Notificaciones
• Primero:
• Obtenemos acceso al servicio de notificaciones.
• Configuramos la notificación superior.
//Obtenemos una referencia al servicio de notificaciones
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager notManager = (NotificationManager)
getSystemService(ns);
//Configuramos la notificación
int icono = android.R.drawable.stat_sys_warning;
long hora = System.currentTimeMillis();
Notification notif = new Notification(icono, "Alerta!", hora);
© 2012-2013 Depto. Ciencia
de la Computación e IA
9
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Notificaciones
• Segundo:
• Configuramos el PendingIntent
• Configuramos la notificación
del desplegable
//Configuramos el PendingIntent
Intent intent = new Intent(context, Activididad.class);
PendingIntent pendIntent = PendingIntent.getActivity(
contexto, 0, intent, 0);
// Configuramos la mensaje del evento
notif.setLatestEventInfo(
contexto, "Mensaje de Alerta",
"Ejemplo de notificación", pendIntent);
© 2012-2013 Depto. Ciencia
de la Computación e IA
10
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Notificaciones
• Tercero:
• Asignar comportamientos
• Mostrar la notificación
• El id (NOTIF_ALERTA_ID ) sirve para actualizar la misma
notificación o poner una nueva, si es un id nuevo.
//AutoCancel: cuando se pulsa la notificación ésta desaparece
notif.flags |= Notification.FLAG_AUTO_CANCEL ;
//Añadir sonido, vibración y luces
notif.defaults |= Notification.DEFAULT_SOUND;
notif.defaults |= Notification.DEFAULT_VIBRATE;
notif.defaults |= Notification.DEFAULT_LIGHTS;
notManager.notify(NOTIF_ALERTA_ID, notif);
© 2012-2013 Depto. Ciencia
de la Computación e IA
11
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Notificaciones
• Cerrar la notificación al pulsar sobre ella:
• Utilizando los flags de la notificación:
//AutoCancel: cuando se pulsa la notificación ésta desaparece
notif.flags |= Notification.FLAG_AUTO_CANCEL ;
• Desde el método onResume() de la actividad:
@Override
protected void onResume() {
super.onResume();
notManager .cancel(NOTIF_ALERTA_ID );
}
© 2012-2013 Depto. Ciencia
de la Computación e IA
12
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Ejemplo: notificaciones con AsyncTask
private class MiTarea extends AsyncTask<String, String, String>{
public static final int NOTIF_ID = 1;
Notification notification;
NotificationManager notificationManager;
@Override
protected void onPreExecute() {
super.onPreExecute();
notificationManager = (NotificationManager)getSystemService(
Context.NOTIFICATION_SERVICE);
notification = new Notification(R.drawable.icon,
"Mensaje evento", System.currentTimeMillis());
}
@Override
protected String doInBackground(String... params) {
while(condicionSeguirEjecutando){
if(condicionEvento)
publishProgress("Información del evento");
}
return null;
}
@Override
protected void onProgressUpdate(String... values) {
Intent notificationIntent = new Intent(
getApplicationContext(), MiActividadPrincipal.class);
PendingIntent contentIntent = PendingIntent.getActivity(
getApplicationContext(), 0, notificationIntent, 0);
notification.setLatestEventInfo (getApplicationContext(),
values[0], contentIntent);
notificationManager.notify (NOTIF_ID, notification);
}
}
© 2012-2013 Depto. Ciencia
de la Computación e IA
13
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Cuadros de Diálogo
© 2012-2013 Depto. Ciencia
de la Computación e IA
14
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Diálogo de Alerta
Permiten mostrar un aviso al
usuario.
• Asegura la visualización ya que
roba el foco de la aplicación.
•
private void mostrarDialogoAlerta()
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Información");
builder.setMessage("Esto es un mensaje de alerta.");
builder.setIcon(R.drawable.dialog_icon);
builder.setPositiveButton("Aceptar",
// acción o null
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Log.i("Dialogos", "Botón aceptar pulsado");
}
});
builder.show();
}
© 2012-2013 Depto. Ciencia
de la Computación e IA
15
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Diálogo de Confirmación
private void mostrarDialogoConfirmacion()
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Confirmacion");
builder.setMessage("¿Confirma la accion seleccionada?");
builder.setPositiveButton("Aceptar",
new DialogInterface.OnClickListener()
public void onClick(DialogInterface
Log.i("Dialogos", "Confirmacion
}
});
builder.setNegativeButton("Cancelar",
new DialogInterface.OnClickListener()
public void onClick(DialogInterface
Log.i("Dialogos", "Confirmacion
}
});
builder.show();
}
{
dialog, int which) {
Aceptada.");
{
dialog, int which) {
Cancelada.");
© 2012-2013 Depto. Ciencia
de la Computación e IA
16
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Diálogo de Selección
private void mostrarDialogoSeleccion()
{
final String[] items = {"Español", "Inglés", "Francés"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Selecciona tu idioma");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Log.i("Dialogos", "Opción elegida: " + items[item]);
}
});
builder.setNegativeButton("Cancelar",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Log.i("Dialogos", "Selección Cancelada.");
}
});
builder.show();
}
© 2012-2013 Depto. Ciencia
de la Computación e IA
17
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Diálogo selección única
final String[] items = {"Español", "Inglés", "Francés"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("título")
.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mSelectedSingleItem = which;
}
})
.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
Log.i(kLOG, "Selección OK: " + mSelectedSingleItem );
}
})
.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
Log.i(kLOG, "Selección Cancelada.");
}
});
builder.show();
© 2012-2013 Depto. Ciencia
de la Computación e IA
18
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Diálogo Selección múltiple
final String[] items = {"Español", "Inglés", "Francés"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("título")
.setMultiChoiceItems (items, null,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked) {
mSelectedMultiChoice.add(which);
} else if (mSelectedMultiChoice.contains(which)) {
mSelectedMultiChoice.remove(Integer.valueOf(which));
}
}
})
.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
// ...
})
.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
// ...
});
builder.show();
© 2012-2013 Depto. Ciencia
de la Computación e IA
19
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Diálogo Personalizado
<LinearLayout xmlns:android="http://schemas.android.."
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:src="@drawable/ic_launcher"
android:layout_width="match_parent"
android:layout_height="64dp"
android:background="#FFFFBB33" />
<EditText
android:id="@+id/username"
android:inputType="textEmailAddress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Usuario" />
<EditText
android:id="@+id/password"
android:inputType="textPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password"/>
</LinearLayout>
© 2012-2013 Depto. Ciencia
de la Computación e IA
20
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
Diálogo Personalizado
AlertDialog.Builder builder =
new AlertDialog.Builder(this);
LayoutInflater inflater = this.getLayoutInflater();
builder.setView(inflater.inflate(R.layout.layout_dialog, null))
.setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
// ...
})
.setNegativeButton("Cancelar", new DialogInterface.OnClickListener(){
// ...
});
builder.show();
© 2012-2013 Depto. Ciencia
de la Computación e IA
21
Experto en Desarrollo de Aplicaciones para Dispositivos Móviles
¿Preguntas...?
© 2012-2013 Depto. Ciencia de la Computación e IA
22

Documentos relacionados