Tengo un dispositivo que cuando realiza una acción, enviara un correo a una dirección determinada, mi tema es, a veces no tendrá conexión para enviar el correo, como dejo pendiente el envio de ese o mas correos hasta que tenga conexión?
Intenta guardar el correo con todos los datos (para quién, cuerpo, asunto) en una tabla en la BD local. Crea un servicio el cual revise esa tabla periódicamente cuando tengas conexión.. si tiene conexión, lees la tabla "mails" y envías.
En la tabla deja un campo el cual diga "Estado", puedes dejarlo como 1 y 0 o bien "Enviado" / "No Enviado" entonces consultas por los no enviados y los enviados los borras periódicamente... Para revisar si tienes conexión a internet hay varias formas... una de estas formas es llegando a un webservice y esperar respuesta, si tienes respuesta es porque tienes conexión, si no tienes es porque no tienes conexión a este. Por otro lado también puedes ver si tienes 3g activado o Wifi activado utilizando un toogle.
Ejemplo (en un servicio):
B4X:
Sub Process_Globals
Dim Red As Toggle
End Sub
Sub Service_Create
Red.Initialize
End Sub
Sub tuFuncion
If Red.DataConnection OR Red.WiFi Then
'Tienes levantado el wifi o el 3G...
End If
End Sub
Si deseas revisar si tienes conexión te aconsejo lo de un webservice... haces la llamada y esperas la respuesta.
Aquí tienes otra solución utilizando la libreria net para saber si tienes conexión:
B4X:
Dim sSocket As ServerSocket
If sSocket.IsInitialized = False Then
sSocket.Initialize(8080, "sSocket")
sSocket.Close
End If
If sSocket.GetMyIP = "127.0.0.1" Then
Msgbox("No tiene conexión a internet", "Atención")
Activity.Finish
End If
Ojo que esa solución solo te va a servir si utilizas plan de datos de telefonía móvil (3g,lte,etc...) , pero no te funcionará si estás conectado a una red wifi ya que aunque no tengas internet la ip será distinta a 127.0.0.1 debido a que la red siempre te otorgará una ip independientemente si no tienes acceso a internet.