O formato pequeno e de fácil visualização de um smartwatch faz com que o Wear OS seja a plataforma ideal para apps que registram, informam e respondem à localização do usuário. Por exemplo, você pode criar apps que fornecem atualizações em tempo real sobre a distância, velocidade e direção do usuário ou que mostrem informações de fácil visualização sobre o local em que ele se encontra.
Para ver mais informações, consulte Criar apps com reconhecimento de local.
Alguns relógios têm um sensor de GPS integrado que recupera dados de local sem exigir um smartphone conectado. Quando você solicita dados de local em um app para smartwatch, o sistema recupera a localização do smartphone ou do relógio usando o método mais eficiente em termos de energia. Assim, mesmo que o relógio não tenha um sensor de GPS, ainda é possível receber informações de localização.
Para reduzir o efeito da aquisição de dados de local na duração da bateria,
chame
setPriority()
com o valor
PRIORITY_BALANCED_POWER_ACCURACY
.
Configurações de prioridade diferentes podem
otimizar os ícones de forma diferente.
Quando possível, economize bateria solicitando o local no máximo
uma vez por minuto usando
setInterval()
.
O app precisa processar a perda de dados de local quando um relógio que não tem sensor de GPS perde a conexão com o smartphone. Esse comportamento será abordado nas próximas seções.
Escolher o método
Existem algumas maneiras de fornecer dados de local a um app para Wear OS. Você pode usar o provedor de localização combinada (FLP, na sigla em inglês) ou os Recursos de saúde do Wear (WHS, na sigla em inglês). O FLP é uma API do Google Play Services.
Use o FLP nas seguintes circunstâncias:
- O app precisa receber dados de local no momento, mas não de maneira contínua, como para marcar a localização de um carro estacionado.
- O app precisa receber dados de local continuamente, mas não precisa armazenar um histórico de localização.
Use o WHS nas seguintes circunstâncias:
- O app precisa receber dados de outros sensores ou pode vir a receber dados de outros sensores no futuro.
- O app é usado para treinos ou exercícios e precisa monitorar os dados de local ao longo de um intervalo específico.
Para relógios pareados com iPhones, consulte Dados de localização para relógios pareados com iPhones.
Usar o provedor de localização combinada
Para receber os dados de local em um smartwatch, use
FusedLocationProviderClient
.
O FLP pode usar dados de local do smartphone. Para mais informações, consulte
Criar clientes de Serviços de localização.
Para ver mais informações sobre como solicitar atualizações de local e rastrear a localização do usuário continuamente, consulte Solicitar atualizações de localização.
Detectar GPS integrado
Se o usuário sair para uma corrida com um relógio que não tem sensor de GPS integrado e não levar o smartphone pareado com ele, o app para smartwatch não vai receber os dados de localização do dispositivo conectado. Detecte essa situação no seu app e informe ao usuário que os recursos de localização não estão disponíveis.
Para determinar se um relógio tem sensor de GPS integrado, chame o método
hasSystemFeature()
com
PackageManager.FEATURE_LOCATION_GPS
.
O código a seguir detectará se o relógio tem um sensor de GPS integrado quando você iniciar uma atividade:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main_activity) if (!hasGps()) { Log.d(TAG, "This hardware doesn't have GPS.") // Fall back to functionality that doesn't use location or // warn the user that location function isn't available. } } private fun hasGps(): Boolean = packageManager.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS)
Java
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); if (!hasGps()) { Log.d(TAG, "This hardware doesn't have GPS."); // Fall back to functionality that doesn't use location or // warn the user that location function isn't available. } ... } private boolean hasGps() { return getPackageManager().hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS); }
Processar eventos de desconexão
Quando um smartwatch sem sensor de GPS integrado perde a conexão com um smartphone, ele perde o fluxo de dados de local. Se o seu app precisar de um fluxo de dados constante, ele precisará detectar a perda de conexão, avisar o usuário e desativar a funcionalidade de forma adequada.
Assim como em um dispositivo móvel, ao solicitar atualizações de localização usando
FusedLocationProviderClient.requestLocationUpdates()
, o app transmite um
LocationCallback
ou uma
PendingIntent
.
Ambos incluem informações de localização e o
status de
LocationAvailability
.
Ao usar LocationCallback
, modifique
onLocationAvailability()
para receber atualizações sobre o status de disponibilidade de localização.
Se optar por usar PendingIntent
e retornar uma
Intent
, extraia o status
de disponibilidade de localização da Intent
usando o
método
LocationAvailability.extractLocationAvailability(Intent)
.
Processar localização não encontrada
Quando o app perde o sinal GPS, é possível recuperar a última localização conhecida do relógio do usuário. Esse recurso é útil quando não é possível restaurar o sinal e quando o relógio não tem um GPS integrado e perde a conexão com o smartphone. Para saber mais, consulte Ver a última localização conhecida.
Transferir dados de local com chamadas em lote
Caso esteja usando chamadas em lote, chame
flushLocations()
quando a tela for reativada ou quando retornar do modo ambiente para
enviar de forma imediata os dados de local em lote para todos os LocationListeners
,
LocationCallbacks
e Pending Intents
registrados.
Recomendados para você
- Observação: o texto do link aparece quando o JavaScript está desativado.
- Otimizar a localização para otimizar a bateria
- Criar uma notificação {:#notification}
- Detectar quando um usuário inicia ou encerra uma atividade