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

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

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

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

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

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

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

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

دو راه برای ارائه داده‌های مکانی به یک برنامه Wear OS وجود دارد. می‌توانید از Fused Location Provider (FLP) یا Wear Health Services (WHS) استفاده کنید. FLP یک API برای سرویس‌های Google Play است.

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

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

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

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

از ارائه دهنده موقعیت مکانی Fused استفاده کنید

در ساعت، داده‌های موقعیت مکانی را با استفاده از 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، داده‌های مکان و سایر حسگرها را شبیه‌سازی کنید. برای اطلاعات بیشتر، به بخش شبیه‌سازی حسگرها مراجعه کنید.

{% کلمه به کلمه %} {% فعل کمکی %} {% کلمه به کلمه %} {% فعل کمکی %}