Spanish Servicio GPS [SOLUCIONADO]

Discussion in 'Spanish Forum' started by benji, Jun 19, 2017.

  1. benji

    benji Active Member Licensed User

    tengo un tema con un servicio GPS, este servicio se inicia con la aplicación, pero queda activo(se supone jaja) el tema es que una vez iniciada la aplicación, no siempre esta transmite su posición...
    este es el código que uso...
    el job que ocupo es el mismo que uso en otras aplicaciones para insertar los datos del GPS y funciona perfecto.


    Code:
    Sub Process_Globals
        
    Dim GPS1 As GPS
       
        
    Dim Job1 As HttpJob
        
    Dim timer1 As Timer
        
    Dim SentenceUtils As String
           
    Dim AuxSentece As String

       
    End Sub

    Sub Service_Create
    GPS1.Initialize(
    "GPS")
    If GPS1.GPSEnabled = False Then
            
    ToastMessageShow("Please enable the GPS device."True)
            
    StartActivity(GPS1.LocationSettingsIntent) 'Will open the relevant settings screen.
    End If
    timer1.Initialize(
    "Timer1",120000)
    End Sub

    Sub GPS_LocationChanged (Location1 As Location)

       
    End Sub

    Sub GPS_NMEA (TimeStamp As Long, Sentence As String)
       
           
    If Sentence.Contains("GPRMC") = True Then
               timer1.Enabled = 
    True
            AuxSentece = Sentence
        
    End If
    End Sub

    Sub Service_Start (StartingIntent As Intent)

          
    StartServiceAt(""DateTime.Now + 120 * 1000,True)
        
          
    ToastMessageShow("Turning GPS ON"True)
       
         
          GPS1.Start(
    0,0

    End Sub

    Sub Timer1_Tick
        
    Dim su As StringUtils
       
       
        SentenceUtils = su.EncodeUrl(AuxSentece,
    "UTF8")
       

        Job1.Initialize(
    "Job1",Me)
        Job1.Download(
    "http://www.xxx.cl:8080/gprmc/Data?acct=estampa&dev=" & Main.PatenteGbl & "&gprmc=" & SentenceUtils)
        
    'End If
       
        
    End Sub

    Sub Service_Destroy

    End Sub
       
    Sub JobDone (Job As HttpJob)
       
    Log("JobName = " & Job.JobName & ", Success = " & Job.Success)
       
    If Job.Success = True Then
          
    Select Job.JobName
             
    Case "Job1""Job2"
                
    'print the result to the logs
                Log(Job.GetString)
          
    End Select
       
    Else
          
    Log("Error: " & Job.ErrorMessage)
          
    ToastMessageShow("Error: " & Job.ErrorMessage, True)
       
    End If
       Job.Release
    End Sub
     
  2. bgsoft

    bgsoft Well-Known Member Licensed User

    Hola Benji:

    Hay varias cosas, si haces un :

    Code:
    StartServiceAt(""DateTime.Now + 120 * 1000,True)
    El timer sobra, ya que el servicio lo estas llamando cada 120 segundos igual que el timer.
    Por otro lado si haces un
    Code:
    GPS1.Start(0,0)
    Cada vez que entra el servicio, igual coincide con el timer y por eso no recibes. Yo lo pondria en el Create

    Después hay una cosa, Android a veces mata los servicios si estan consumiendo mucho, o por que le falte memoria, y eso podria ser otra causa de que no recibas. Para evitar esto añade lo de abajo al servicio:

    Code:
    #Region Service Attributes
    #StartCommandReturnValue: android.app.Service.START_STICKY
    Con esto si Android lo mata al cabo de algunos segundos lo pondrá en marcha

    Si quieres que el servicio entre cuando reinicies el dispositivo movil :
    Code:
    #Region Service Attributes#StartAtBoot: true
    Pegale un vistazo a este tutorial:
    https://www.b4x.com/android/forum/threads/b4a-tutorial-módulos-de-servicio.42689/



    Saludos
     
    JordiCP likes this.
  3. benji

    benji Active Member Licensed User

    gracias bgsoft,

    estoy probando algunas cosas que mencionas...
    con esto
    Code:
    Sub GPS_NMEA (TimeStamp As Long, Sentence As String)
      
           
    If Sentence.Contains("GPRMC") = True Then
               timer1.Enabled = 
    True
            AuxSentece = Sentence
        
    End If
    End Sub
    tenia la idea, una vez iniciado el servicio, cada 2 minutos enviara la información al servidor, si me dices que no use el timer, como controlo que se envié cada dos minutos la info?
     
  4. benji

    benji Active Member Licensed User

    ya, lo arregle(parece) insertando el job de envio de datos, en el Service_Start, que se ejecuta cada dos minutos... y esta llegando la info, cada dos minutos...
    vamos a ver como anda y les cuento...

    gracias bgsoft.
     
  5. bgsoft

    bgsoft Well-Known Member Licensed User

    Hola Benji:

    Con esto:
    Code:
    StartServiceAt(""DateTime.Now + 120 * 1000,True)
    Haces que el tiempo que has puesto arriba (DateTime.Now + 120 * 1000) entre de nuevo en esto:
    Code:
    Sub Service_Start (StartingIntent As Intent)
    Creo que no te has leido el tutorial de módulos de servicios, alli lo pone :D

    Saludos
     
  6. bgsoft

    bgsoft Well-Known Member Licensed User

    Hola Benji

    Te estaba escribiendo cuando tu lo hacias, veo que encontraste la solucion ;)

    Saludos
     
  7. benji

    benji Active Member Licensed User

    jajaja, gracias nuevamente.... si me leí el tutorial :D
     
  8. bgsoft

    bgsoft Well-Known Member Licensed User

    Ponle el STICKY y así no te lo parará ;)

    Y si ademas le añades a la cabecera [SOLUCIONADO] mejor para todos :D

    Saludos
     
  9. xavcor75

    xavcor75 Member Licensed User

    Perdon si revivo el post pero queria preguntarte como te va con el tema del consumo de bateria. Yo hice un proceso similar al tuyo pero por los problemas de bateria cambie a un proceso con menor consumo usando los servicios de google...
     
  10. bgsoft

    bgsoft Well-Known Member Licensed User

    Hola, mirate este post que se habla de varios métodos de leer la posición, igual te soluciona mejor el consumo de bateria que con la libreria GPS.
    https://www.b4x.com/android/forum/t...sedlocationprovider-vs-locationmanager.80050/

    Saludos
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice