O formato pequeno e de fácil visualização de um relógio torna o Wear OS by Google uma plataforma ideal para apps que registram, informam e respondem à localização do usuário. Como exemplos, você pode criar apps que fornecem aos usuários atualizações em tempo real sobre distância, velocidade e direção, ou que fornecem dicas de fácil visualização sobre o local onde se encontram.
Confira os seguintes recursos relacionados:
Alguns relógios têm um sensor de GPS integrado que recupera dados de localização sem exigir um smartphone conectado. Quando você solicita dados de localização em um app de relógio, não é preciso se preocupar com a origem desses dados; o sistema os recebe pelo método mais eficiente. No entanto, conforme é descrito nas seções abaixo, seu app precisa processar a perda de dados de localização.
O método recomendado para adquirir dados de localização em um relógio é usar o Provedor de localização combinada. Além disso, este documento descreve como verificar a presença de sensores de localização no relógio, receber dados de localização e monitorar conexões de dados vinculadas. Confira também Dados de localização para relógios pareados com iPhones.
Para reduzir o impacto negativo da aquisição de dados de localização na
duração da bateria, certifique-se de que seu app chame
setPriority()
definido como
PRIORITY_BALANCED_POWER_ACCURACY
. Solicite a localização
com a frequência máxima de uma vez por minuto usando
setInterval()
.
Observação: este documento pressupõe que você saiba usar a API do Google Play Services para recuperar dados de local.
Usar o provedor de localização combinada
Em um smartwatch, você deve receber dados de local usando o
FusedLocationProviderApi
(FLP). O FLP usará os dados
de local do smartphone automaticamente se o smartwatch não tiver um sensor de GPS.
Para ver mais informações, consulte
Criar
um cliente de serviços de localização.
Para ver mais informações sobre como solicitar atualizações de localização e rastrear a localização de um usuário continuamente, consulte Receber atualizações de localização.
Detectar GPS integrado
Se um usuário for caminhar com um relógio que não tenha um sensor de GPS integrado e deixar o smartphone pareado em casa, seu app de relógio não poderá receber dados de localização por meio de uma conexão vinculada. O app precisará detectar a situação e avisar o usuário de que a funcionalidade de localização não está disponível.
Para determinar se um relógio tem um sensor de GPS integrado, use o
método
hasSystemFeature()
. 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 does not use location or // warn the user that location function is not 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 does not use location or // warn the user that location function is not available. } ... } private boolean hasGps() { return getPackageManager().hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS); }
Processar eventos de desconexão
Se um relógio não tiver um sensor de GPS integrado, ele perderá o stream de dados de localização repentinamente quando perder a conexão de dados vinculada a um smartphone. Se seu app esperar um stream constante de dados, ele precisará detectar a perda de conexão, avisar o usuário e remover a funcionalidade de forma eficiente.
Para detectar a perda de uma conexão de dados vinculada, use o método
GetConnectedNodesResult
da
NodeApi
. Exemplo:
- Inicialize um
GoogleApiClient
e crie um método que chame aNodeApi
, por exemplo, um método chamadoinspectNodes
:Kotlin
private lateinit var googleApiClient: GoogleApiClient private var wearableConnected = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) googleApiClient = GoogleApiClient.Builder(this) .addApi(Wearable.API) .addConnectionCallbacks(object : GoogleApiClient.ConnectionCallbacks { override fun onConnected(connectionHint: Bundle?) { inspectNodes() } override fun onConnectionSuspended(cause: Int) {} }) .build() } private fun inspectNodes() { Wearable.NodeApi .getConnectedNodes(googleApiClient) .setResultCallback(this, 1000, TimeUnit.MILLISECONDS) }
Java
private GoogleApiClient googleApiClient; private boolean wearableConnected = false; @Override public void onCreate() { super.onCreate(); googleApiClient = new GoogleApiClient.Builder(this) .addApi(Wearable.API) .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() { @Override public void onConnected(Bundle connectionHint) { inspectNodes(); } @Override public void onConnectionSuspended(int cause) { } }) .build(); } private void inspectNodes(){ Wearable.NodeApi.getConnectedNodes(googleApiClient).setResultCallback(this, 1000, TimeUnit.MILLISECONDS); }
- Use o método de callback a seguir para conseguir o resultado de uso do
método
inspectNodes
:Kotlin
override fun onResult(getConnectedNodesResult: NodeApi.GetConnectedNodesResult) { wearableConnected = false getConnectedNodesResult.nodes.forEach { node -> wearableConnected = wearableConnected or node.isNearby } Log.v("TEST", "wearableConnected: $wearableConnected") }
Java
@Override public void onResult(NodeApi.GetConnectedNodesResult getConnectedNodesResult) { if (getConnectedNodesResult != null && getConnectedNodesResult.getNodes() != null){ wearableConnected = false; for (Node node : getConnectedNodesResult.getNodes()){ if (node.isNearby()){ wearableConnected = true; } } } Log.v("TEST", "wearableConnected: " + wearableConnected); }
Processar localização não encontrada
Quando o sinal de GPS é perdido, você pode recuperar a última localização conhecida do relógio do usuário. Recuperar a última localização conhecida é útil quando não é possível utilizar o GPS ou quando o relógio não tem um GPS integrado e perde a conexão com o smartphone. Para ver mais informações, consulte Recuperar a última localização conhecida.