Presentación de SeviBus Wear, un prototipo de funcionalidades extra para la app SeviBus usando la preview del SDK de Android Wear.
Este proyecto se hizo para el hackatlon de Android Wear del GDG Sevilla, y se llevó el premio ganador.
Más info del evento en: https://plus.google.com/events/cga8shv4gjpvbbpbn7i8uffrg60
7. Disparador
private void sendNotification() {
// cargo las líneas de las llegadas
ArrayMap<Linea, Llegada> llegadasMapa = new ArrayMap<>();
for (int i = 0; i < mLlegadas.size(); i++) {
int id = mLlegadas.keyAt(i);
Linea linea = getDBHelper().getDaoLinea().queryForId(id);
llegadasMapa.put(linea, mLlegadas.get(id));
}
// Envía la notificación
WearManager.sendWearNotification(getActivity(), llegadasMapa,
mParada);
}
1
8. Notificación I
NotificationCompat.InboxStyle inboxStyle = new
NotificationCompat.InboxStyle();
for (int i = 0; i < llegadasMapa.size(); i++) {
Linea linea = llegadasMapa.keyAt(i);
Llegada llegada = llegadasMapa.valueAt(i);
if (llegada != null && llegada.getBus1() != null) {
inboxStyle.addLine(String.format("Línea %s - %d min",
linea.getNumero(), llegada.getBus1().getTiempo()));
}
}
!
NotificationCompat.Builder builder = new
NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(context.getRes
ources(), R.drawable.bg_wear))
.setContentTitle(String.format("Llegadas parada %s",
parada.getNumero()))
.setContentText("Próximas llegadas SeviBus")
.setPriority(NotificationCompat.PRIORITY_LOW)
.setStyle(inboxStyle);
2
9. Notificación II
PendingIntent intent = PendingIntent.getBroadcast(context, 666,
new Intent(WearReceiver.ACTION_5_MINUTES)
.putExtra(WearReceiver.EXTRA_PARADA, parada.getNumero())
.putExtra(WearReceiver.EXTRA_MILLIS, 1 * 60 * 1000), 0);
Notification notification =
new WearableNotifications.Builder(builder)
.setMinPriority()
.addAction(new
WearableNotifications.Action.Builder(R.drawable.ic_action_actuali
zar, "En 5 minutos", intent).build())
.build();
NotificationManagerCompat.from(context).notify(0, notification);
2
10. Para más tarde
public class WearReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
long checkInMilliseconds =
intent.getIntExtra(EXTRA_MILLIS, 0);
int paradaId = intent.getIntExtra(EXTRA_PARADA, 0);
PendingIntent checkIntent =
PendingIntent.getService(context, 777, new
Intent(WearIntentService.ACTION_CHECK_WEAR).putExtra(EXTRA_PARADA
, paradaId), PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager)
context.getSystemService(Context.ALARM_SERVICE);
am.setExact(AlarmManager.ELAPSED_REALTIME,
checkInMilliseconds, checkIntent);
NotificationManagerCompat.from(context).cancelAll();
}
}
3
11. Repetir
public class WearIntentService extends IntentService {
@Override
protected void onHandleIntent(Intent intent) {
int paradaId =
intent.getIntExtra(WearReceiver.EXTRA_PARADA, 0);
Parada parada = getParada(paradaId);
List<Linea> linea = getLineas(parada);
ArrayMap<Linea, Llegada> llegadas;
// Obtiene las llegadas de la parada
// ...
// Manda la notificacion
WearManager.sendWearNotification(this, llegadas, parada);
}
}
4