Mendeteksi lokasi di Wear OS

Faktor bentuk smartwatch yang kecil dan mudah dilihat membuat Wear OS menjadi platform ideal untuk aplikasi yang merekam, melaporkan, dan merespons lokasi pengguna. Contohnya, Anda dapat mem-build aplikasi yang memberikan info real-time kepada pengguna mengenai jarak, kecepatan, dan arah, atau memberikan informasi yang mudah dilihat mengenai area di sekitar pengguna.

Untuk informasi selengkapnya, lihat Membuat aplikasi yang mampu menentukan lokasi.

Beberapa smartwatch dilengkapi sensor GPS bawaan yang dapat mengambil data lokasi tanpa perlu ponsel yang terhubung. Saat Anda meminta data lokasi di aplikasi smartwatch, sistem akan mengambil lokasi dari ponsel atau smartwatch menggunakan metode yang paling hemat daya. Jadi, meskipun tanpa sensor GPS di smartwatch, Anda masih bisa mendapatkan informasi lokasi.

Untuk mengurangi efek akuisisi data lokasi terhadap masa pakai baterai, panggil setPriority() dengan nilai PRIORITY_BALANCED_POWER_ACCURACY. Setelan prioritas yang berbeda dapat mengoptimalkan chip secara berbeda.

Jika memungkinkan, hemat baterai dengan meminta lokasi tidak lebih dari sekali per menit menggunakan setInterval().

Seperti yang dijelaskan di bagian berikut, aplikasi Anda perlu menangani hilangnya data lokasi saat smartwatch tanpa sensor terputus dari ponsel.

Memilih metode

Ada beberapa cara untuk memberikan data lokasi ke aplikasi Wear OS. Anda dapat menggunakan Penyedia Lokasi Gabungan (FLP) atau Fitur Kesehatan Wear (WHS). FLP adalah API layanan Google Play.

Gunakan FLP dalam keadaan berikut:

  • Anda menginginkan data lokasi pada saat itu, tetapi tidak berkelanjutan, seperti menandai lokasi mobil yang diparkir.
  • Anda ingin menggunakan lokasi secara terus-menerus, tetapi tidak memerlukan histori lokasi.

Gunakan WHS dalam keadaan berikut:

  • Anda menginginkan data dari sensor lain atau mungkin menginginkan data dari sensor lain di masa mendatang.
  • Aplikasi Anda adalah aplikasi olahraga atau latihan yang perlu melacak data lokasi selama interval waktu tertentu.

Untuk smartwatch yang tersambung dengan iPhone, lihat Data lokasi untuk smartwatch yang disambungkan ke iPhone.

Menggunakan Penyedia Lokasi Gabungan

Di smartwatch, dapatkan data lokasi menggunakan FusedLocationProviderClient. FLP dapat menggunakan data lokasi dari ponsel. Untuk mengetahui informasi selengkapnya, lihat Membuat klien layanan lokasi.

Untuk informasi tentang cara meminta pembaruan lokasi dan terus melacak lokasi pengguna, lihat Meminta pembaruan lokasi.

Mendeteksi GPS internal

Jika pengguna melakukan joging dengan smartwatch yang tidak dilengkapi sensor GPS bawaan dan tidak membawa ponsel yang disambungkan, aplikasi smartwatch tidak dapat memperoleh data lokasi melalui perangkat terhubung. Deteksi situasi ini di aplikasi Anda dan peringatkan pengguna bahwa kemampuan lokasi tidak tersedia.

Untuk menentukan apakah smartwatch memiliki sensor GPS bawaan, panggil metode hasSystemFeature() dengan PackageManager.FEATURE_LOCATION_GPS. Kode berikut mendeteksi apakah smartwatch dilengkapi sensor GPS bawaan saat Anda memulai suatu 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 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);
}

Menangani peristiwa sambungan terputus

Jika smartwatch tidak dilengkapi sensor GPS bawaan dan tidak terhubung ke ponsel, smartwatch akan kehilangan aliran data lokasinya. Jika menginginkan streaming data yang stabil, aplikasi Anda harus mendeteksi terputusnya koneksi, memperingatkan pengguna, dan menurunkan fungsionalitas secara halus.

Seperti pada perangkat seluler, saat Anda meminta pembaruan lokasi menggunakan FusedLocationProviderClient.requestLocationUpdates(), Anda meneruskan LocationCallback atau PendingIntent. Keduanya menyertakan informasi lokasi dan status LocationAvailability.

Saat menggunakan opsi LocationCallback, ganti onLocationAvailability() untuk menerima info terbaru terkait status ketersediaan lokasi.

Saat menggunakan opsi PendingIntent dan Intent ditampilkan, ekstrak status ketersediaan lokasi dari Intent menggunakan metode LocationAvailability.extractLocationAvailability(Intent).

Menangani lokasi tidak ditemukan

Ketika sinyal GPS hilang, Anda bisa mendapatkan kembali lokasi terakhir yang diketahui dari smartwatch pengguna. Mendapatkan kembali lokasi terakhir yang diketahui sangat membantu ketika Anda tidak bisa mendapatkan sinyal GPS, juga ketika smartwatch tidak dilengkapi GPS bawaan dan kehilangan koneksi dengan ponsel. Untuk mengetahui informasi selengkapnya, lihat Mendapatkan lokasi terakhir yang diketahui.

Menghapus lokasi dengan panggilan batch

Jika Anda menggunakan panggilan batch, panggil flushLocations() saat layar kembali aktif atau kembali dari mode standby untuk segera menampilkan lokasi batch apa pun ke semua LocationListeners, LocationCallbacks, dan Pending Intents yang terdaftar.