xMova Android

Location

Versão 2.13+

Permite que o aplicativo faça uso do serviço de localização da plataforma Android, enviando dados de posicionamento global para um Web Service.

Versão 2.17+ O parser cria as entidades Location, _GEOFENCE_LOCATION e _GEOFENCE_PLACE automaticamente quando não são declaradas no fluxo, permitindo que sejam usadas normalmente no fluxo mesmo sem a declaração explícita. A velocidade enviada no registro da localização era data em m/s e agora está convertida para km/h

Atributos:

  • tracking: Habilita a funcionalidade de tracking
  • geofence: Habilita a funcionalidade de geofencing
  • required: Determina que para usar o aplicativo o usuário deve manter o GPS ativo no dispositivo, caso não esteja ativo é exibida uma mensagem de aviso que impede o usuário de utilizar o aplicativo.
  • disableNotifyMessage: Desabilita a mensagem que é exibida para notificar ao usuário que o GPS está desabilitado, esta mensagem só notifica o usuário e permite continuar utilizando o aplicativo mesmo com o GPS desabilitado.
  • disableMotionDetection: Desabilita a funcionalidade que inicia a obtenção de localização quando o sensor de acelerômetro identifica alguma movimentação no dispositivo. Este recurso só é habilitado quando o aplicativo está com a funcionalidade de tracking ou geofence ativada.
  • disableSpeedVerification: Faz com que o aplicativo interrompa a obtenção de localização para tracking e geofence sem verificar se os valores do atributo maxLocationsWithMinSpeed seja atingido.
  • minTime: Determina o tempo mínimo que o aplicativo deve aguardar para inciar a solicitação de uma nova localização. Caso o aplicativo esteja com a funcionalidade tracking ou geofence o comportamento é alterado se o dispositivo indicar movimento. Padrão: 10m (30m Versão 2.41.2)
  • minLastTime: Determina o tempo máximo de chache para que uma localização obtida ainda seja considerada válida. Padrão: 10m (30m Versão 2.41.2)
  • minDistance: Determina a distância mínima para que um registro de localização seja enviado quando a funcionalidade de tracking está habilitada. Padrão 1000m (5000m Versão 2.41.2)
  • maxTriesForAccuracy: Determina quantas localizações o aplicativo deve aguardar até que o valor de minAccuracy seja alcançado, caso o valor não seja alcançado é utilizada a localização com maior precisão. Padrão: 10
  • minAccuracy: Determina a precisão necessária para que uma localização seja aceita. Caso o valor do atributo maxTriesForAccuracy seja atingido então a precisão pode variar. Padrão 50m
  • minSpeed: Determina a velocidade mínima que o aplicativo deve considerar para continuar a receber localizações para as funcionalidades de tracking e geofence. Padrão: 0
  • maxLocationsWithMinSpeed: Determina quantas localizações com a velocidade mínima; definida em minSpeed, o aplicativo deve receber até que interrompa a funcionalidade de tracking e geofence. Padrão 5
  • disableSpeak: Desabilita a funcionalidade que fala as mensagens referentes ao serviço de localização.
  • disableToast: Desabilita a funcionalidade que exibe um Toast para exibir as mensagens referentes ao serviço de localização.

Versão 2.17+

  • timeToNotifyStart: Determina o tempo que o aplicativo deve aguardar até chamar o evento OnMovimentStart. A execução do evento pode ser cancelada durante o tempo de espera caso não for mais detectado movimento.
  • timeToNotifyStop: Determina o tempo que o aplicativo deve aguardar até chamar o evento OnMovimentStop. A execução do evnto pode ser cancelada durante o tempo de espera caso seja detectado movimento.

Versão 2.41.2+

  • minBearing: Determina a diferença de angulação horizontal mínima entre os registros de tracking para serem enviados. Padrão 6

Note

Quando é feito o uso do tracking o aplicativo avalia o tempo do último registro enviado (minTime), a distância entre o último registro enviado e o atual (minDistance) e a angulação horizontal (minBearing) e quando qualquer dos valores for satisfatórioé salvo o registro de localização como um registro de tracking.

Langs :

  • FixedKeyGeofenceTransitionEnter: Falada e/ou exibida no Toast quando o valor do campo enterText da entidade _GEOFENCE_PLACE não está definido e o dispositivo entrou em uma área conhecida. Caso o valor da lang e do campo sejam vazios nenhuma mensagem é exibida. Podem ser usadas as tags <name> e <description> que serão substituidas pelos valores dos respectivos campos.
  • FixedKeyGeofenceTransitionExit: Falada e/ou exibida no Toast quando o valor do campo exitText da entidade _GEOFENCE_PLACE não está definido e o dispositivo saiu de uma área conhecida. Caso o valor da lang e do campo sejam vazios nenhuma mensagem é exibida. Podem ser usadas as tags <name> e <description> que serão substituidas pelos valores dos respectivos campos.
  • FixedKeyGpsDisabledMessage: Mensagem exibida quando o GPS está desabilitado. Padrão: Ative o GPS para que o aplicativo funcione corretamente.
  • FixedKeyLocationService: Título exibido na notificação que fica na barra de status quando o serviço de localização está ativo. Padrão: Serviço de Localização
  • FixedKeyGettingLocation: Mensagem exibida na notificação que fica na barra de status quando o aplicativo está obtendo a primeira localização. Padrão: Obtendo Localização

Eventos:

  • onInsert: Executado quando uma nova localização referente ao tracking é inserida no banco de dados. (Entidade: Location)

Versão 2.17+

  • OnGeolocationTransitionEnter: Executado quando o aplicativo entra em uma área conhecida. (Entidade: _GEOFENCE_LOCATION)
  • OnGeolocationTransitionExit: Executado quando o aplicativo sai de uma área conhecida. (Entidade: _GEOFENCE_LOCATION)
  • OnMovimentStart: Executado quando é detectado o início do movimento por meio da localização do GPS seguindo o parâmetro de minSpeed, declarado na configuração. Recebe os registro de Location (location), _MARTE_STATUS (marte) e _GEOFENCE_LOCATION (geofence) (Os dois últimos somente se o aplicativo possuir as funcionalides referentes a cada entidade)
  • OnMoviment: Executado enquanto é detectado movimento por meio da localização do GPS seguindo o parâmetro de minSpeed, declarado na configuração. Recebe os registro de Location (location), _MARTE_STATUS (marte) e _GEOFENCE_LOCATION (geofence) (Os dois últimos somente se o aplicativo possuir as funcionalides referentes a cada entidade)
  • OnMovimentStop: Executado quando é detectado que o movimento foi encerrado por meio da localização do GPS seguindo o parâmetro de minSpeed; somente é chamado se o evento OnMovimentStart tiver sido executado, declarado na configuração. Recebe os registro de Location, Location (location), _MARTE_STATUS (marte) e _GEOFENCE_LOCATION (geofence) (Os dois últimos somente se o aplicativo possuir as funcionalides referentes a cada entidade)

Entidades:

Entidade Location usada para inserir a informação de localização em algum apontamento e também para enviar registros de tracking.:

Location sync=out
        lat double
        long double
        alt double
        gpsTime long
        speed float
        bearing float
        accuracy float

Entidade _GEOFENCE_LOCATION usada para inserir a informação de geofence em algum apontamento e também para enviar registros de geofence.:

_GEOFENCE_LOCATION sync=out
        id inc
        place _GEOFENCE_PLACE inlineData
        location Location inlineData
        entered boolean

Entidade _GEOFENCE_PLACE usada para receber informações sobre locais que devem ser verificados nas rotinas de geofence.:

_GEOFENCE_PLACE
        id int
        name String
        description String
        coordinates String
        notify String
        enterText String
        exitText String

Versão 2.17+ Entidade _LOCATION_CONFIG entidade que permite definir as configurações de location sem a necessidade de atualizar o fluxo (O fluxo deve ter uma configuração padrão de location para que possa usar esta entidade).:

_LOCATION_CONFIG sync=in|backgroundIn
        id int
        tracking boolean
        geofence boolean
        notifyDisabled boolean
        gpsEnabledRequired boolean
        disableLocationSpeedVerification boolean
        disableDeviceMotionDetection boolean
        disableSpeak boolean
        disableToast boolean
        minTime int
        minLastTime int
        minDistance int
        maxTriesForAccuracy int
        minAccuracy int
        minSpeed float
        maxLocationsWithMinSpeed int
        timeToNotifyStop long
        timeToNotifyStart long

Exemplo de Configuração:

App appCode=X
        id 30264
        name xMova Test
        version 1.0.157
        intVersion 158
        install type=fillAuth inputEntity=AuthInput
        camera resolution=61440 quality=100

        location
                tracking
                geofence
                minTime 1m
                minLastTime 5m
                minDistance 50
                maxTriesForAccuracy 13
                minAccuracy 5
                minSpeed 0
                maxLocationsWithMinSpeed 5

        OnMovimentStart
                toast @"Start Moviment"
                if hasFixedPoint == true
                        toast location.speed
                        Boletim boletim = SelectLast From Boletim
                        if boletim != null
                                if location.speed >= boletim.minSpeed
                                        Object confirmResult = confirm text=@"Apontar Movimento?" backOnlyAfterNo timeout=boletim.timeout timeoutExceededValue=boletim.defaultValue
                                        if confirmResult == true
                                                crud ApontamentoMovimento
                                                return true
                                        else
                                                return false
                                else
                                        return false
                        else
                                return false
                else
                        return false

        OnMoviment
                if hasFixedPoint == true
                        Boletim bol = SelectLast From Boletim
                        if bol != null
                                if bol.showMovimentToast == true
                                        toast @"Moviment"
                                        toast location.speed

        OnMovimentStop
                toast @"Moviment Stopped"
                if hasFixedPoint == true
                        toast location.speed
                        Boletim boletim = SelectLast From Boletim
                        if boletim != null
                                Object confirmResult = confirm text=@"Apontar Parada?" backOnlyAfterNo timeout=boletim.timeout timeoutExceededValue=boletim.defaultValue
                                if confirmResult == true
                                        crud ApontamentoParada
                                        return true
                                else
                                        return false
                        else
                                return false
                else
                        return false

Exemplo do envio da informação de um geofence pelo Web Service:

{
        "status": 0,
        "types": [{
                "name": "_GEOFENCE_PLACE",
                "records": [
                {
                        "id": 15,
                        "coordinates": "-23.193704,-45.893164;-23.193689,-45.892432;-23.193980,-45.892473;-23.193982,-45.893200",
                        "name": "Simova 22",
                        "description": "Simova Sala 22",
                        "notify": "ENTER|EXIT",
                        "enterText" : "Simova Sala 22",
                        "exitText": "Fora da Simova 22"
                },{
                        "id": 16,
                        "coordinates": "-23.193980,-45.892473;-23.193982,-45.893200;-23.194209,-45.893228;-23.194218,-45.892476",
                        "name": "Simova 24",
                        "description": "Simova Sala 24",
                        "notify": "ENTER|EXIT",
                        "enterText" : "Simova Sala 24",
                        "exitText": "Fora da Simova 24"
                }]
        }]
}

Exemplo de um registro de tracking:

{
        "type": "Location",
        "records": [{
                "lat": -23.193908333333336,
                "createDateTimeType": "S",
                "createDateTime": "01/12/2017 09:58:57",
                "XDATE-createDateTime": {
                        "date": "01/12/2017 09:58:57",
                        "gpsMillis": 1512129539224,
                        "deviceMillis": 1512129540137,
                        "timeZone": "America/Sao_Paulo",
                        "type": "S",
                        "millis": 1512129537400
                },
                "long": -45.892758333333326,
                "alt": 617.3,
                "gpsTime": 1512125940000,
                "speed": 0.0,
                "bearing": 290.07,
                "accuracy": 6.9
        }]
}

Exemplo de um registro de geofence:

{
        "type": "_GEOFENCE_LOCATION",
        "records": [{
                "id": 1,
                "createDateTimeType": "S",
                "createDateTime": "01/12/2017 09:58:57",
                "XDATE-createDateTime": {
                        "date": "01/12/2017 09:58:57",
                        "gpsMillis": 1512129539224,
                        "deviceMillis": 1512129540137,
                        "timeZone": "America/Sao_Paulo",
                        "type": "S",
                        "millis": 1512129537400
                },
                "place": {
                        "id": 1,
                        "name": "Simova22",
                        "description": "Empresa Simova 22",
                        "coordinates": "-23.193704,-45.893164;-23.193689,-45.892432;-23.193980,-45.892473;-23.193982,-45.893200",
                        "notify": "ENTER|EXIT",
                        "enterText": "Dentro da Simova 22",
                        "exitText": "Fora da Simova 22"
                },
                "location": {
                        "lat": -23.193908333333336,
                        "createDateTimeType": "S",
                        "createDateTime": "01/12/2017 09:58:57",
                        "XDATE-createDateTime": {
                                "date": "01/12/2017 09:58:57",
                                "gpsMillis": 1512129539224,
                                "deviceMillis": 1512129540137,
                                "timeZone": "America/Sao_Paulo",
                                "type": "S",
                                "millis": 1512129537400
                        },
                        "long": -45.892758333333326,
                        "alt": 617.3,
                        "gpsTime": 1512125940000,
                        "speed": 0.0,
                        "bearing": 290.07,
                        "accuracy": 6.9
                },
                "entered": 1
        }]
}

Exemplo de um Apontamento Enviado com Localização:

ApontamentoLocation sync=out
        id inc
        location Location inlineData
        text String

{
        "type": "ApontamentoLocation",
        "records": [{
                "id": 1,
                "createDateTimeType": "S",
                "createDateTime": "04/12/2017 07:54:37",
                "XDATE-createDateTime": {
                        "date": "04/12/2017 07:54:37",
                        "gpsMillis": 1512381282438,
                        "deviceMillis": 1512381284786,
                        "timeZone": "America/Sao_Paulo",
                        "type": "S",
                        "millis": 1512381277427
                },
                "location": {
                        "lat": -23.19423833,
                        "createDateTimeType": "S",
                        "createDateTime": "04/12/2017 07:54:29",
                        "XDATE-createDateTime": {
                                "date": "04/12/2017 07:54:29",
                                "gpsMillis": 1512381274927,
                                "deviceMillis": 1512381277275,
                                "timeZone": "America/Sao_Paulo",
                                "type": "S",
                                "millis": 1512381269874
                        },
                        "long": -45.89276562,
                        "alt": 575.0,
                        "gpsTime": 1512381270000,
                        "speed": 0.0,
                        "bearing": 0.0,
                        "accuracy": 7.0
                },
                "text": "test"
        }]
}

Exemplo de um Apontamento Enviado com Geofence e Localização:

ApontamentoGeofence sync=out
        id inc
        geofencePlace _GEOFENCE_LOCATION inlineData
        location Location inlineData
        text String


{
        "type": "ApontamentoGeofence",
        "records": [{
                "id": 1,
                "createDateTimeType": "S",
                "createDateTime": "01/12/2017 10:02:14",
                "XDATE-createDateTime": {
                        "date": "01/12/2017 10:02:14",
                        "gpsMillis": 1512129736133,
                        "deviceMillis": 1512129737031,
                        "timeZone": "America/Sao_Paulo",
                        "type": "S",
                        "millis": 1512129734274
                },
                "geofencePlace": {
                        "createDateTimeType": "S",
                        "createDateTime": "01/12/2017 10:01:06",
                        "XDATE-createDateTime": {
                                "date": "01/12/2017 10:01:06",
                                "gpsMillis": 1512129668233,
                                "deviceMillis": 1512129669047,
                                "timeZone": "America/Sao_Paulo",
                                "type": "S",
                                "millis": 1512129666273
                        },
                        "place": {
                                "id": 1,
                                "name": "Simova22",
                                "description": "Empresa Simova 22",
                                "coordinates": "-23.193704,-45.893164;-23.193689,-45.892432;-23.193980,-45.892473;-23.193982,-45.893200",
                                "notify": "ENTER|EXIT",
                                "enterText": "Dentro da Simova 22",
                                "exitText": "Fora da Simova 22"
                        },
                        "location": {
                                "lat": -23.193873333333332,
                                "createDateTimeType": "S",
                                "createDateTime": "01/12/2017 10:01:06",
                                "XDATE-createDateTime": {
                                        "date": "01/12/2017 10:01:06",
                                        "gpsMillis": 1512129668233,
                                        "deviceMillis": 1512129669047,
                                        "timeZone": "America/Sao_Paulo",
                                        "type": "S",
                                        "millis": 1512129666273
                                },
                                "long": -45.89301833333334,
                                "alt": 617.3,
                                "gpsTime": 1512126067000,
                                "speed": 0.0,
                                "bearing": 256.27,
                                "accuracy": 6.0
                        },
                        "entered": 1
                },
                "location": {
                        "lat": -23.193873333333332,
                        "createDateTimeType": "S",
                        "createDateTime": "01/12/2017 10:01:06",
                        "XDATE-createDateTime": {
                                "date": "01/12/2017 10:01:06",
                                "gpsMillis": 1512129668233,
                                "deviceMillis": 1512129669047,
                                "timeZone": "America/Sao_Paulo",
                                "type": "S",
                                "millis": 1512129666273
                        },
                        "long": -45.89301833333334,
                        "alt": 617.3,
                        "gpsTime": 1512126067000,
                        "speed": 0.0,
                        "bearing": 256.27,
                        "accuracy": 6.0
                },
                "text": "test"
        }]
}