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

این بخش برخی از سناریوهای جمع‌آوری مکان معمولی را به همراه توصیه‌هایی برای استفاده بهینه از APIهای ارائه‌دهنده مکان‌یابی جغرافیایی و ترکیبی توضیح می‌دهد.

به روز رسانی های قابل مشاهده یا پیش زمینه کاربر

مثال: یک برنامه نقشه برداری که به به روز رسانی های مکرر و دقیق با تأخیر بسیار کم نیاز دارد. همه به‌روزرسانی‌ها در پیش‌زمینه اتفاق می‌افتند: کاربر یک فعالیت را شروع می‌کند، داده‌های مکان را مصرف می‌کند و سپس پس از مدت کوتاهی فعالیت را متوقف می‌کند.

از متد setPriority() با مقدار PRIORITY_HIGH_ACCURACY یا PRIORITY_BALANCED_POWER_ACCURACY استفاده کنید.

فاصله مشخص شده در متد setInterval() بستگی به مورد استفاده دارد: برای سناریوهای زمان واقعی، مقدار را روی چند ثانیه تنظیم کنید. در غیر این صورت، به چند دقیقه محدود کنید (تقریباً دو دقیقه یا بیشتر برای به حداقل رساندن مصرف باتری توصیه می شود).

مکان دستگاه را بدانید

مثال: یک برنامه هواشناسی می خواهد مکان دستگاه را بداند.

از متد getLastLocation() استفاده کنید که جدیدترین مکان موجود را برمی گرداند (که در موارد نادر ممکن است تهی باشد). این روش راهی ساده برای دریافت موقعیت مکانی فراهم می کند و هزینه های مرتبط با درخواست فعالانه به روز رسانی مکان را متحمل نمی شود. در ارتباط با متد isLocationAvailable() استفاده کنید، که وقتی موقعیت مکانی که توسط getLastLocation() به طور معقولی به روز باشد، true را برمی گرداند.

زمانی که کاربر در یک مکان خاص است، به روز رسانی را شروع کنید

مثال: درخواست به‌روزرسانی زمانی که کاربر در فاصله معینی از محل کار، خانه یا مکان دیگری است.

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

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

به روز رسانی را بر اساس وضعیت فعالیت کاربر شروع کنید

مثال: درخواست به‌روزرسانی فقط زمانی که کاربر در حال رانندگی یا دوچرخه‌سواری است.

از Activity Recognition API در ارتباط با به‌روزرسانی‌های ارائه‌دهنده مکان ترکیبی استفاده کنید. زمانی که فعالیت هدفمند شناسایی شد، درخواست به‌روزرسانی کنید و زمانی که کاربر انجام آن فعالیت را متوقف کرد، به‌روزرسانی‌ها را حذف کنید.

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

به روز رسانی های طولانی مدت موقعیت مکانی پس زمینه مرتبط با مناطق جغرافیایی

مثال: کاربر می خواهد زمانی که دستگاه در نزدیکی یک خرده فروش قرار دارد به او اطلاع داده شود.

این یک مورد استفاده عالی برای geofencing است. از آنجا که استفاده تقریباً به طور قطع شامل مکان پس‌زمینه است، از روش addGeofences(GeofencingRequest, PendingIntent) استفاده کنید.

شما باید گزینه های پیکربندی زیر را تنظیم کنید:

  • اگر در حال ردیابی انتقال های ساکن هستید، از متد setLoiteringDelay() استفاده کنید که مقدار تقریباً پنج دقیقه یا کمتر را ارسال می کند.

  • از setNotificationResponsiveness() استفاده کنید و مقدار تقریباً پنج دقیقه را ارسال کنید. با این حال، اگر برنامه شما می تواند تاخیر اضافی در پاسخگویی را مدیریت کند، از مقدار تقریباً ده دقیقه استفاده کنید.

یک برنامه تنها می تواند حداکثر 100 geofences را در یک زمان ثبت کند. در یک مورد استفاده که یک برنامه می‌خواهد تعداد زیادی از گزینه‌های خرده‌فروش را ردیابی کند، ممکن است برنامه بخواهد geofence‌های بزرگ (در سطح شهر) را ثبت کند و به صورت پویا ژئوفنس‌های کوچک‌تر (برای مکان‌های داخل شهر) را برای فروشگاه‌های درون geofence بزرگ‌تر ثبت کند. هنگامی که کاربر وارد یک geofence بزرگ می شود، geofence های کوچکتر را اضافه کنید. هنگامی که کاربر از geofence بزرگتر خارج می شود، geofence های کوچکتر را حذف کرده و دوباره geofence ها را برای یک منطقه جدید ثبت کنید.

به‌روزرسانی‌های طولانی مدت موقعیت مکانی پس‌زمینه بدون یک جزء برنامه قابل مشاهده

مثال: برنامه ای که به صورت غیر فعال مکان را ردیابی می کند

در صورت امکان از متد setPriority() با گزینه PRIORITY_NO_POWER استفاده کنید زیرا تقریباً هیچ باتری تخلیه نمی شود. اگر استفاده از PRIORITY_NO_POWER ممکن نیست، از PRIORITY_BALANCED_POWER_ACCURACY یا PRIORITY_LOW_POWER استفاده کنید، اما از استفاده از PRIORITY_HIGH_ACCURACY برای کار در پس‌زمینه پایدار اجتناب کنید زیرا این گزینه به طور قابل‌توجهی باتری را تخلیه می‌کند.

اگر به داده های مکان بیشتری نیاز دارید، با فراخوانی متد setFastestInterval() و ارسال مقداری کوچکتر از آنچه به setInterval() ارسال می کنید، از موقعیت غیرفعال استفاده کنید. وقتی با گزینه PRIORITY_NO_POWER ترکیب می‌شود، موقعیت مکانی غیرفعال می‌تواند موقعیت مکانی را که توسط برنامه‌های دیگر محاسبه می‌شود، بدون هزینه اضافی ارائه دهد.

فرکانس را با اضافه کردن مقداری تأخیر، با استفاده از متد setMaxWaitTime() تعدیل کنید. برای مثال، اگر از متد setinterval() با مقدار تقریباً 10 دقیقه استفاده می‌کنید، باید setMaxWaitTime() با مقداری بین 30 تا 60 دقیقه فراخوانی کنید. با استفاده از این گزینه‌ها، مکان برای برنامه شما تقریباً هر 10 دقیقه محاسبه می‌شود، اما برنامه فقط هر 30 تا 60 دقیقه با برخی از داده‌های موقعیت مکانی در دسترس به‌عنوان یک به‌روزرسانی دسته‌ای، بیدار می‌شود. این رویکرد تاخیر را با داده های بیشتر در دسترس و عملکرد باتری بهتر معامله می کند.

به‌روزرسانی‌های مکرر با دقت بالا در حین تعامل کاربر با سایر برنامه‌ها

مثال: یک برنامه ناوبری یا تناسب اندام که وقتی کاربر صفحه را خاموش می کند یا برنامه دیگری را باز می کند به کار خود ادامه می دهد.

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