Spanish Seguimiento por GPS

Discussion in 'Spanish Forum' started by EcoGus, Mar 6, 2018.

  1. EcoGus

    EcoGus Member Licensed User

    Hola, a ver si me podeis echar una mano.
    Hace un año hice una aplicacion que recogia los puntos GPS y me los envia a una base de datos en MYSQL. Me funcionaba perfectamente...hasta que cambie de telefono.
    Anteriormente tenia una version de Android 4.2 y ahora tengo un dispositivo con Android 7.0.

    El problema que tengo con el nuevo dispositivo, es que aunque entra el servicio perfectamente, cada 10 segundos, no realiza el proceso de localicazion "Sub GPS_LocationChanged (Location1 As Location)" esto me ocurre cuando el telefono entra en reposo, mientras esta encendido no hay problema.

    He intentado usar las librerias FusedLocationProvider y b4aLocationManager, pero no he conseguido hacerlo funcionar.

    ¿pueden echarme una mano?

    Gracias.
     

    Attached Files:

  2. bgsoft

    bgsoft Well-Known Member Licensed User

    Hola:

    Como decia Jack el destripador "vayamos por partes" :D

    He visto varios errores en el codigo, pero no vamos a entrar en eso. Vamos por el problema de tu post

    Si quieres crear un servicio, mejor no emplees Starter, da muchos problemas, por otro lado Starter se va a inicializar nada mas poner en marcha la aplicacion, mirate esto y lo entenderás:
    https://www.b4x.com/android/forum/t...-el-módulo-de-servicio-starter.66596/#content

    Cuando existe un evento, no hace falta que llames al servicio cada x tiempo, si el servicio está en marcha, cuando se produzca el evento entrará.

    Cuando pares un servicio, ademas del StopService(Starter) (de tu App) haz un CancelScheduledService(Starter) , por que de esa forma si existen llamadas pendientes con tu StartServiceAt("",DateTime.Now + 10000,True) las quitaras y evitaras que vuelva a entrar.

    Tu App funciona en Android 7 sin tocar nada (la he probado) la culpa es del señor Google, que al comprar Android, todo lo referente a ubicación lo cambió para sus intereses y si no activas la ubicación, por mucho que tu hagas un lGPS.requestMobileLocation si no tienes activa la ubicación no se producirá el evento :D, por eso no te funciona. Pon un logs en el evento Sub dGPS_locationchanged(Location1 As Location) y veras que cuando actives la ubicación entrará.

    Saludos
     
    Ferbis likes this.
  3. EcoGus

    EcoGus Member Licensed User

    Perdona bgsoft, a que te refieres con activar la ubicación

    A la opción de ubicación del Programa,del dispositivo, de Google?
     
  4. bgsoft

    bgsoft Well-Known Member Licensed User

    Hola, la ubicación del dispositivo es lo que tienes que activar, normalmente está en la barra de arriba, en Android 7 por defecto es el segundo icono empezando por la izquierda (al menos en un Samsung)

    Saludos
     
  5. EcoGus

    EcoGus Member Licensed User

    Hola, creo que ya lo tenia activado...adjunto las fotos.
    Mi telefono es un MII Xiaomi, pero aun así no funciona.

    Estoy probando a que cuando el programa detecte que se entra en _PAUSE se ponga en marcha STARTSERVICEAT con 10 segundos. Una vez que vuelve a ejecutarse el SERVICE_START, realizo un PHONE_KEEPALIVE(false) para que el telefono vuelva a entrar en funcionamiento y obligue a realizar el cambio de ubicacion del GPS.

    El problema que tengo con este sistema, que voy a probar si funciona hoy mismo, es que se ve un parpadeo en la pantalla. Intento hacer un SetScreenBrightness(0) para que no se vea encenderse la pantalla, pero da error al ejecutarlo desde el servicio.

    Hago la prueba y os comento si funciona.
     

    Attached Files:

  6. EcoGus

    EcoGus Member Licensed User

    Hola dbsoft,

    He hecho la prueba y me funciona bien...
    He hecho que se ejecute el servicio cada 30 segundos y en el STARTSERVICE le coloco una opcion de KEEPALIVE y KEEPALIVERELEASE, os dejo la aplicacion por si quereis usarla y perfeccionarla a vuestro gusto. Tengo que ajustar un poco la opcion del brillo de la pantalla, pero me funciona bien. Lo unico que voy a volver a la libreria de GPS en vez de LOCATIONMANAGER, pues me coge puntos fuera de la ruta por la que voy, entiendo que coge los repetidores en vez de la posicion GPS real.
     

    Attached Files:

  7. bgsoft

    bgsoft Well-Known Member Licensed User


    Hola, como hiciste un requestMobileLocation coge los datos de las redes (wifi, gsm, etc) añadele requestGPSLocation y empleará el GPS y tendrás mas precisión, lo bueno es que si mantienes los dos y estas en un edificio te dará la posición por triangulación, cosa que no te hará si lo haces solo con GPS.

    Saludos
     
  8. EcoGus

    EcoGus Member Licensed User

    Hola bgsoft,

    Acabo de encontrar el problema...a ver si me puedes echar una mano.

    El problema esta en el ahorro de batería. Al parecer es una nueva funcion que tiene Android desde la version 6.0 que llaman DOZE. Si entro en la configuración de ahorro de energia de la batería y excluyo el programa que estoy preparando, el sistema recoge datos sin parar.

    Sabes si hay algun modo de quitar el programa de este ahorro de energia? o una función del MANIFEST?

    Gracias.
     
    Last edited: Mar 11, 2018
  9. bgsoft

    bgsoft Well-Known Member Licensed User

    Hola:

    Tendrias que mantener "despierto" el dispositivo para que no vaya a modo sleep . (hay varios post en este foro sobre eso)

    No se si lo has puesto, pero puedes poner esto en el servicio para que Android no lo mate:
    Code:
    #StartCommandReturnValue: android.app.Service.START_STICKY
    Existe una libreria (FusedLocationProvider) que puedes priorizar el uso de energia: https://www.b4x.com/android/help/fusedlocationprovider.html#priority

    Aqui puedes encontrar información sobre DOZE : https://developer.android.com/training/monitoring-device-state/doze-standby.html

    Si con todo esto no lo consigues, lo mejor seria que abrieras un nuevo post ya que desde dentro de este será dificil que los compañeros del foro vean esta nueva pregunta.

    Saludos
     
  10. benji

    benji Active Member Licensed User

    con la libreria PhoneWakeState, tienes el comando Awake.KeepAlive(True), con lo cual siempre esta despierto... hay que tener en cuenta con esto, el drenaje de la libreria
     
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