شناسایی مکان در Wear OS

ضریب شکل کوچک و قابل‌نگاه ساعت، Wear OS را به پلاتفرمی ایده‌آل برای برنامه‌هایی تبدیل می‌کند که مکان کاربر را ضبط، گزارش، و به آن پاسخ می‌دهند. به‌عنوان مثال، می‌توانید برنامه‌هایی بسازید که به کاربران به‌روزرسانی‌های هم‌زمان درباره فاصله، سرعت، و جهت آن‌ها ارائه دهد، یا نشانه‌هایی سریع درباره محیط اطراف کاربران ارائه دهد.

برای اطلاعات بیشتر، ساختن برنامه‌های مکان‌آگاه را ببینید.

برخی‌از ساعت‌ها حسگر GPS داخلی دارند که بدون نیاز به تلفن متصل، داده‌های مکان را بازیابی می‌کند. وقتی در برنامه ساعت داده‌های مکان را درخواست می‌کنید، سیستم مکان را بااستفاده از روشی که کمترین مصرف انرژی را دارد از تلفن یا ساعت بازیابی می‌کند. بنابراین، حتی بدون حسگر GPS در ساعت، همچنان می‌توانید اطلاعات مکان دریافت کنید.

برای کاهش تأثیر دریافت داده‌های مکان بر عمر باتری، با مقدار PRIORITY_BALANCED_POWER_ACCURACY با setPriority() تماس بگیرید. تنظیمات اولویت مختلف ممکن است تراشه‌ها را به‌طور متفاوتی بهینه‌سازی کنند.

درصورت امکان، با درخواست مکان حداکثر یک بار در دقیقه بااستفاده از setInterval()، در مصرف باتری صرفه‌جویی کنید.

همان‌طور که در بخش‌های بعدی توضیح داده شده است، وقتی اتصال ساعت بدون حسگر از تلفن قطع می‌شود، برنامه شما باید ازدست رفتن داده‌های مکان را مدیریت کند.

روش خود را انتخاب کنید

دو روش برای ارائه داده‌های مکان به برنامه Wear OS وجود دارد. می‌توانید از ارائه‌دهنده مکان ترکیبی (FLP) یا خدمات سلامتی Wear (WHS) استفاده کنید. ‫FLP یک میانای برنامه‌سازی کاربردی خدمات Google Play است.

در شرایط زیر از FLP استفاده کنید:

  • داده‌های مکان را در لحظه می‌خواهید اما به‌طور مداوم نمی‌خواهید، مثلاً برای علامت‌گذاری مکان خودرو پارک‌شده.
  • مکان را به‌طور پیوسته می‌خواهید اما به سابقه مکان نیاز ندارید.

در شرایط زیر از WHS استفاده کنید:

  • داده‌های حسگرهای دیگر را می‌خواهید یا احتمالاً در آینده داده‌های حسگرهای دیگر را خواهید خواست.
  • برنامه شما برنامه تمرین یا ورزش است که باید داده‌های مکان را درطول یک بازه زمانی خاص ردیابی کند.

استفاده از «ارائه‌دهنده مکان تلفیقی»

در ساعت، بااستفاده از FusedLocationProviderClient داده‌های مکان را دریافت کنید. ‫FLP ممکن است از داده‌های مکان تلفن استفاده کند. برای اطلاعات بیشتر، ایجاد سرویس‌گیرنده خدمات مکان را ببینید.

برای کسب اطلاعات درباره درخواست به‌روزرسانی‌های مکان و ردیابی مداوم مکان کاربر، درخواست به‌روزرسانی‌های مکان را ببینید.

شناسایی GPS داخلی

اگر کاربری با ساعتی که حسگر GPS داخلی ندارد پیاده‌روی کند و تلفن جفت‌شده را همراه نبرد، برنامه ساعت شما نمی‌تواند ازطریق دستگاه متصل داده‌های مکان را دریافت کند. این وضعیت را در برنامه‌تان تشخیص دهید و به کاربر هشدار دهید که قابلیت‌های مکان دردسترس نیست.

برای تعیین اینکه ساعت حسگر GPS داخلی دارد یا نه، روش hasSystemFeature() را با PackageManager.FEATURE_LOCATION_GPS فراخوانی کنید. کد زیر تشخیص می‌دهد که آیا ساعت هنگام شروع فعالیت حسگر GPS داخلی دارد یا نه:

class LocationActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // ...
    }
    fun hasGps(): Boolean =
        packageManager.hasSystemFeature(PackageManager.FEATURE_LOCATION_GPS)
}

مدیریت رویدادهای قطع اتصال

اگر ساعتی حسگر GPS داخلی نداشته باشد و اتصال آن با تلفن قطع شود، ساعت جریان داده مکان خود را ازدست می‌دهد. اگر برنامه شما انتظار دارد جریان ثابتی از داده‌ها دریافت کند، برنامه شما باید ازدست رفتن اتصال را تشخیص دهد، به کاربر هشدار دهد، و عملکرد خود را به‌تدریج کاهش دهد.

همانند دستگاه همراه، وقتی بااستفاده از FusedLocationProviderClient.requestLocationUpdates() درخواست به‌روزرسانی مکان می‌کنید، یا LocationCallback یا PendingIntent را ارسال می‌کنید. هر دوی این موارد شامل اطلاعات مکان و وضعیت LocationAvailability می‌شود.

هنگام استفاده از گزینه LocationCallback، onLocationAvailability() را ملغی کنید تا به‌روزرسانی‌های مربوط به وضعیت دردسترس بودن مکان را دریافت کنید.

وقتی از گزینه PendingIntent استفاده می‌کنید و Intent برگردانده می‌شود، وضعیت دردسترس بودن مکان را بااستفاده از روش LocationAvailability.extractLocationAvailability(Intent) از Intent استخراج کنید.

مکان نام کاربری پیدا نشد

وقتی سیگنال GPS قطع می‌شود، می‌توانید آخرین مکان شناخته‌شده ساعت کاربر را بازیابی کنید. وقتی نمی‌توانید موقعیت GPS را دریافت کنید و وقتی ساعت GPS داخلی ندارد و اتصالش با تلفن قطع می‌شود، بازیابی آخرین مکان معلوم مفید است. برای اطلاعات بیشتر، به دریافت آخرین مکان مشخص مراجعه کنید.

مکان را با تماس‌های دسته‌ای پاک کنید

اگر از تماس‌های دسته‌ای استفاده می‌کنید، وقتی صفحه‌نمایش روشن شد یا از حالت آماده به کار برگشت، با flushLocations() تماس بگیرید تا بلافاصله مکان‌های دسته‌ای را به همه LocationListeners، LocationCallbacks، و Pending Intents ثبت‌شده برگردانید.

ملاحظات آزمایش

بااستفاده از کنترل‌های توسعه‌یافته شبیه‌ساز Wear OS، مکان و سایر داده‌های حسگر را شبیه‌سازی کنید. برای اطلاعات بیشتر، شبیه‌سازی حسگرها را ببینید.