=========
`xMova Android <../doc.html>`_
=========
-------
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 e 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 e 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"
}]
}