Faktor bentuk smartwatch yang kecil dan mudah dilihat menjadikan Wear OS by Google platform ideal untuk aplikasi yang merekam, melaporkan, dan merespons lokasi pengguna. Contohnya, Anda dapat membuat aplikasi yang memberikan info real-time kepada pengguna tentang jarak, kecepatan, dan arah, atau memberikan informasi yang mudah dilihat tentang area di sekitar pengguna.
Lihat referensi terkait berikut:
Smartwatch tertentu dilengkapi sensor GPS internal yang dapat mengambil data lokasi tanpa perlu ponsel yang di-tether. Namun, saat meminta data lokasi di aplikasi smartwatch, Anda tidak perlu khawatir tentang asal data lokasi. Sistem mendapatkan data melalui metode yang paling hemat daya. Namun, sebagaimana dijelaskan dalam bagian di bawah ini, aplikasi memang perlu menangani hilangnya data lokasi.
Metode yang direkomendasikan untuk memperoleh data lokasi pada smartwatch adalah menggunakan Penyedia Lokasi Fusi. Selain itu, dokumen ini menjelaskan cara memeriksa sensor lokasi, menerima data lokasi, dan memantau koneksi data yang di-tether pada smartwatch. Lihat juga Data Lokasi untuk Smartwatch yang Disambungkan ke iPhone.
Untuk mengurangi dampak negatif perolehan data lokasi terhadap
masa pakai baterai, Anda harus memastikan aplikasi memanggil
setPriority()
yang ditetapkan ke
PRIORITY_BALANCED_POWER_ACCURACY
. Anda tidak boleh menanyakan lokasi
lebih dari sekali per menit menggunakan
setInterval()
.
Catatan: Dokumen ini mengasumsikan bahwa Anda memahami cara menggunakan Google Play Services API untuk mengambil data lokasi.
Menggunakan penyedia lokasi fusi
Pada smartwatch, Anda akan mendapatkan data lokasi menggunakan
FusedLocationProviderApi
(FLP). FLP otomatis menggunakan
data lokasi dari ponsel jika smartwatch tidak dilengkapi sensor GPS.
Untuk informasi selengkapnya, lihat
Membuat
klien layanan lokasi.
Untuk informasi tentang cara meminta pembaruan lokasi dan terus melacak lokasi pengguna, lihat Menerima pembaruan lokasi.
Mendeteksi GPS internal
Jika pengguna melakukan joging dengan smartwatch yang tidak dilengkapi sensor GPS internal, tetapi tidak membawa ponsel yang disambungkan, aplikasi smartwatch tidak dapat memperoleh data lokasi melalui koneksi yang di-tether. Aplikasi harus mampu mendeteksi situasi dan memperingatkan pengguna bahwa fungsi lokasi tidak tersedia.
Untuk menentukan apakah smartwatch memiliki sensor GPS, gunakan
metode
hasSystemFeature()
. Kode berikut mendeteksi apakah smartwatch memiliki
sensor GPS internal saat Anda memulai aktivitas:
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); }
Menangani peristiwa sambungan terputus
Jika tidak memiliki sensor GPS internal, smartwatch dapat tiba-tiba kehilangan aliran data lokasi setelah kehilangan koneksi data yang di-tether ke ponsel. Jika menginginkan aliran data yang stabil, aplikasi harus mendeteksi terputusnya koneksi, memperingatkan pengguna, dan menurunkan fungsi secara halus.
Untuk mendeteksi terputusnya koneksi data yang di-tether, gunakan
metode
GetConnectedNodesResult
NodeApi
. Contohnya:
- Lakukan inisialisasi
GoogleApiClient
dan buat metode yang memanggilNodeApi
, misalnya metode yang disebutinspectNodes
: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); }
- Gunakan metode callback berikut untuk mendapatkan hasil penggunaan
metode
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); }
Menangani lokasi tidak ditemukan
Bila sinyal GPS hilang, Anda dapat memperoleh kembali lokasi terakhir smartwatch pengguna yang diketahui. Mendapatkan kembali lokasi terakhir yang diketahui sangat membantu bila Anda tidak dapat memperoleh sinyal GPS, atau bila smartwatch tidak dilengkapi GPS internal dan kehilangan koneksi dengan ponsel. Untuk informasi selengkapnya, lihat Mendapatkan lokasi terakhir yang diketahui.