Localização aproximada no Android Automotive OS

Para respeitar a privacidade do usuário, os desenvolvedores de apps são incentivados a solicitar apenas permissões de localização aproximada. Os apps que precisam de uma posição aproximada geralmente usam a localização de rede combinada (FLP, na sigla em inglês) porque ela é rápida e consome menos energia. Em comparação com dispositivos móveis Android, a localização de rede em apps automotivos pode ser mais difícil. Você pode usar duas APIs do Android:

  • A API LocationManager exige que você use requestLocationUpdates para identificar explicitamente o provedor de localização preferido.

  • A API Google Play Services oferece uma maneira mais simples de trabalhar com a localização em FusedLocationProviderClient.

Muitos apps automotivos usam o FLP da API Google Play Services em vez de LocationManager. A FLP seleciona o provedor de localização ideal com base nos critérios e políticas de solicitação de localização (energia e precisão) necessários para o veículo.

Em vez disso, você pode solicitar e usar explicitamente NETWORK_PROVIDER e GPS_PROVIDER para posições precisas, que usam permissões de android.permission.ACCESS_FINE_LOCATION. No Android 12 (nível 31 da API) e versões mais recentes, o FUSED_PROVIDER, que antes só podia ser acessado pela API do Google Play Services, está disponível como um provedor de localização para LocationManager. Confira uma implementação do FLP em FusedLocationProvider.java.

Embora seja possível usar GPS_PROVIDER apenas com direitos de permissão aproximados (o framework reduz artificialmente a acurácia para se alinhar às expectativas), isso não faz muito sentido para desenvolvedores que segmentam smartphones Android, já que a disponibilidade geral é baixa e geralmente mais lenta para obter uma posição aproximada.

Local da rede em veículos

O NETWORK_PROVIDER usado em smartphones Android (com os Serviços móveis do Google) determina a localização com base em torres de celular, pontos de acesso Wi-Fi e sensores Bluetooth (BT) próximos. Como resultado, NETWORK_PROVIDER pode exigir uma conexão de dados.

Para apps automotivos, as restrições de dispositivo são diferentes. Como o sistema global de navegação por satélite (GNSS) geralmente está ativado, não há penalidades devido ao aumento do uso de energia e da bateria. Como resultado, o tempo de atividade do IVI não é comprometido. Nosso objetivo é minimizar os dados trocados com nossos servidores.

Portanto, muitos apps usam o FLP da API Play em vez de LocationManager diretamente, já que o FLP faz automaticamente a coisa inteligente usando o provedor de localização mais adequado para atender aos critérios/políticas de solicitação de localização (ou seja, energia e precisão).

Ao contrário dos dispositivos móveis, os veículos raramente parecem pular de um lugar para outro. A posição do veículo é conhecida na maioria das vezes.

Provedor de localização de rede (NLP)

A maioria dos veículos não implementa as APIs de telefonia necessárias para receber as informações necessárias sobre um ID de célula (e intensidade do sinal). Como resultado e porque minimizamos o uso de dados, nenhuma implementação funcional adicional de PNL é fornecida.

Provedor de localização combinada

O FLP móvel, além de usar de forma inteligente provedores de rede e GPS conforme apropriado, combina informações de outros sensores para melhorar ainda mais a qualidade dos locais. A implementação atual da FLP do Automotive, por outro lado, aproveita as proposições mencionadas e usa o GPS_PROVIDER como uma fonte subjacente o tempo todo. Ele altera as posições do GNSS, adicionando alguns erros para ser mais impreciso quando necessário. Por exemplo, quando locais aproximados são fornecidos a um cliente.

Por isso, em alguns casos, a primeira posição pode levar mais tempo do que o normal para ficar disponível. Por exemplo, na primeira vez que um veículo ou, para ser mais preciso, o subsistema de localização dele é usado ou após ser rebocado.

Criar apps para uso em dispositivos móveis e automotivos

Para apps destinados a dispositivos móveis e automotivos que não exigem uma qualidade de precisão maior, solicite android.permission.ACCESS_COARSE_LOCATION apenas e volte a usar FLP quando disponível. Como alternativa, use GPS_PROVIDER diretamente com as mesmas permissões. O framework reduz a precisão da posição do GNSS subjacente para se alinhar às expectativas da API. Para saber mais, consulte Precisão em Solicitar permissões de localização.

Além disso, esses apps precisam declarar explicitamente o recurso android.hardware.location.network como opcional no manifesto. Exemplo:

<uses-feature android:name="android.hardware.location.network" android:required="false" />

Essa abordagem ajuda a alcançar maior compatibilidade com dispositivos em diferentes formatos e, portanto, máxima disponibilidade de apps sem diferenças de código para receber posições quando necessário.