Android

App de entregas Android con sincronización web y GPS

En este post te mostraré una app de entrega de paquetes para Android que programé hace algún tiempo en Java, la cual sirve para dar seguimiento a entregas de paquetes o pedidos, sincronizada con un servidor para bajar y subir las entregas pendientes en cada terminal.

Se puede decir que es, a baja escala, algo similar a lo que hace DHL, Estafeta o esos servicios que entregan paquetes (no sé bien el nombre de ese campo).

La información se guarda en una base de datos SQLite local, y posteriormente se envía a un servidor para sincronizarse.

Para llevar un seguimiento de los paquetes se escanea el código de barras usando la cámara del teléfono inteligente, o escribiendo el código manualmente.

Control de entregas en Android

La app de entregas para Android que vengo a presentar tiene las siguientes características:

  • Funciona totalmente sin internet
  • Las entregas son descargadas y enviadas al servidor cuando hay una conexión disponible
  • Los paquetes tienen estatus como entregado o ausente
  • Cuando se realiza una entrega, se debe tomar una foto del paquete, misma que es enviada al servidor
  • Escanea o lee el código de barras usando la cámara del móvil
  • Obtiene la ubicación a través del GPS del dispositivo al momento de entregar el paquete
  • Servidor web configurable
  • Visualización de entregas en servidor

¿Cómo funciona?

  1. La app se puede instalar en varios dispositivos móviles, se configuran las entregas pendientes en el servidor.
  2. Al inicio de la jornada, todos los usuarios descargan las entregas pendientes y van a, valga la redundancia, entregar los paquetes
  3. En el transcurso del día los usuarios realizan las entregas, toman fotos, etcétera
  4. Al final de la jornada, todos los usuarios sincronizan y suben al servidor los registros de paquetes entregados
  5. En el servidor llegará toda la información de la entrega, una foto, las coordenadas, la fecha y hora y el identificador del dispositivo.

Ahora sí veamos los módulos de la app.

Nota: en las imágenes voy a cubrir la ubicación y el identificador del dispositivo por obvias razones.

La pantalla de inicio

Pantalla principal de la app de entregas con Android

Esta es la pantalla que se ve al entrar a la app. Tenemos 3 botones (uno es el de ajustes en la esquina inferior derecha):

  1. Sincronizar con host: envía las entregas guardadas localmente en el teléfono, y descarga las nuevas entregas. Esto lo hace en caso de que haya una conexión confiable.
  2. Leer número: escanear o escribir el número del paquete, para marcarlo como entregado o modificar sus detalles.
  3. Ajustes: configurar el host y la zona horaria

También se ve un apartado de los créditos, para los iconos que fueron usados.

Ajustes de la app de entregas en Android

Para entrar a los ajustes se requiere escribir una contraseña. Si la misma es correcta se despliega una alerta personalizada, lo que se puede cambiar es el host de la sincronización y la zona horaria local que se toma cuando se guarda la entrega.

Los ajustes son guardados por dispositivo, así se puede configurar cada uno. En este caso he configurado el host con una IP local.

Sincronización de entregas con el servidor

Una vez que el host está configurado, se puede sincronizar. Primero se descargan las nuevas entregas, y después se envían las ya entregadas.

En caso de que todo vaya bien, se muestra un Toast con el mensaje de éxito.

Ese mensaje se muestra únicamente si hay una conexión estable y la subida y bajada de información fue exitosa.

Lectura del código de barras del paquete

Si se presiona el botón de Leer número se pasa a la siguiente pantalla en donde se puede escribir el número manualmente o escanearlo tocando el icono del código de barras:

Si el usuario elige escanear el código se muestra la siguiente pantalla en donde gracias a la cámara escanea el código de barras del paquete dentro de la app de entregas en Android:

Detalles de entrega

Si el código que se leyó o escribió es de una entrega existente (es decir, que se descargó del servidor) se muestra la siguiente pantalla:

En la misma se puede elegir una acción del paquete, ya que no siempre será entregado exitosamente. Las opciones son:

Es un simple Spinner con una lista de opciones.

En caso de que se seleccione como Entregado, se pasa a la siguiente pantalla.

Foto de la entrega

En el siguiente apartado se muestran los detalles de la entrega, para comprobar que el repartidor realmente entregó el paquete se debe tomar una foto del mismo usando el botón:

Ya sé que está un poco grande, pero bueno, al tocarlo se pide tomar una foto:

Es una foto del post que estoy escribiendo actualmente. Ahora se presiona el botón de Finalizar entrega (la foto se previsualiza):

Y todo se guarda en la base de datos local. Después de esto se regresa a la pantalla que escanea el código.

El usuario repite el proceso miles de veces y al final del día presiona el botón que sincroniza con el servidor.

Servidor web de la app de entregas de Android

En el lado del servidor llegan los pedidos ya entregados. Como en este caso solo programé una prueba de concepto del servidor, no quedó tan bien diseñado, pero funciona de maravilla.

Al sincronizar, se muestra lo siguiente en el web service:

Como se puede ver, llega toda la información, incluyendo la foto y las coordenadas, así como la fecha y hora.

También se puede apreciar el dispositivo y su identificador.

Código fuente

En este caso esta aplicación no es open source. Puedes obtener el código fuente de la app y el servidor PHP por 75 dólares. Para ello:

  1. Realiza el depósito por Paypal o en uno de los métodos mencionados aquí.
  2. Envíame un mensaje indicando que ya has pagado
  3. Yo confirmaré el pago y te enviaré el código fuente de la app y del servidor.

Conclusión

Así es como termino la presentación de esta app para Android que hice. Funciona perfecto como un ejercicio, un proyecto o para usarla en la vida real entregando paquetes de manera offline y sincronizando con servidores web.

En este caso el servidor web está escrito con PHP, el lenguaje que más conozco, pero al final las llamadas son HTTP y por lo tanto cualquier lenguaje funciona.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.