در تلاش برای کاهش مصرف انرژی، Android 8.0 (سطح API 26) تعداد دفعات بازیابی مکان فعلی کاربر را در زمانی که برنامه در پسزمینه اجرا میشود، محدود میکند. تحت این شرایط، برنامهها میتوانند هر ساعت فقط چند بار بهروزرسانی موقعیت مکانی را دریافت کنند.
توجه: این محدودیتها برای همه برنامههای مورد استفاده در دستگاههای دارای Android 8.0 (سطح API 26) یا بالاتر، صرفنظر از نسخه SDK هدف برنامه اعمال میشود.
اگر برنامه شما در هنگام اجرا در پسزمینه به هشدارهای بیدرنگ یا تشخیص حرکت تکیه میکند، این رفتار بازیابی مکان بسیار مهم است که به خاطر داشته باشید.
رفتار برنامه پیش زمینه حفظ می شود
اگر برنامهای در دستگاه دارای Android 8.0 (سطح API 26) در پیشزمینه باشد، رفتار بهروزرسانی مکان مانند Android 7.1.1 (سطح API 25) و پایینتر است.
هشدار: اگر برنامه شما بهروزرسانیهای موقعیت مکانی نزدیک به زمان واقعی را در مدت زمان طولانی بازیابی کند، عمر باتری دستگاه به طور قابل توجهی کوتاهتر میشود.
تنظیم رفتار مکان برنامه شما
در نظر بگیرید که اگر برنامه شما بهروزرسانیهای مکان را به ندرت دریافت کند، موارد استفاده برنامه شما برای اجرای در پسزمینه اصلاً موفق نمیشود یا خیر. در این صورت، میتوانید با انجام یکی از اقدامات زیر، بهروزرسانیهای مکان را بیشتر بازیابی کنید:
- برنامه خود را در پیش زمینه قرار دهید.
با فراخوانی
startForegroundService()
یک سرویس پیش زمینه را در برنامه خود راه اندازی کنید. هنگامی که چنین سرویس پیش زمینه فعال است، به عنوان یک اعلان در حال انجام در ناحیه اعلان ظاهر می شود.احتیاط: اگر برنامه شما در حال اجرا در پسزمینه در دستگاهی که دارای Android 11 (سطح API 30) یا بالاتر است، سرویس پیشزمینه را راهاندازی کند، برنامه شما نمیتواند به اطلاعات مکان دسترسی داشته باشد مگر اینکه کاربر مجوز
ACCESS_BACKGROUND_LOCATION
را به برنامه شما اعطا کرده باشد. برای اطلاعات بیشتر، راهنمای محدودیتهای حین استفاده مرتبط با خدمات پیشزمینه را مشاهده کنید.- از عناصر Geofencing API مانند
GeofencingClient
استفاده کنید که برای به حداقل رساندن مصرف انرژی بهینه شده است. - از شنونده موقعیت مکانی غیرفعال استفاده کنید، که اگر برنامههای پیشزمینه درخواست بهروزرسانی مکان با سرعت بیشتری داشته باشند، ممکن است بهروزرسانیهای مکان سریعتر را دریافت کنند.
توجه: اگر برنامه شما نیاز به دسترسی به سابقه موقعیت مکانی دارد که حاوی بهروزرسانیهای مکرر است، از نسخه دستهبندیشده عناصر Fused Location Provider API مانند رابط FusedLocationProviderApi
استفاده کنید. وقتی برنامه شما در پسزمینه اجرا میشود، این API مکان کاربر را بیشتر از API غیر دستهای دریافت میکند. با این حال، به خاطر داشته باشید که برنامه شما همچنان بهصورت دستهای بهروزرسانیها را هر ساعت چند بار دریافت میکند.
APIهای تحت تأثیر
تغییرات رفتار بازیابی مکان در برنامههای پسزمینه بر APIهای زیر تأثیر میگذارد:
- ارائه دهنده مکان فیوز شده (FLP)
اگر برنامه شما در پسزمینه اجرا میشود، سرویس سیستم موقعیت مکانی یک مکان جدید را برای برنامه شما فقط چند بار در هر ساعت محاسبه میکند. این مورد حتی زمانی که برنامه شما درخواست بهروزرسانی مکان مکرر میکند نیز وجود دارد.
با این حال، با استفاده از نسخه دستهای FLP، پس از دریافت بهروزرسانی دستهای برنامه، به تاریخچه مکان مکرر بیشتری دسترسی خواهید داشت، که این نیز فقط چند بار در هر ساعت انجام میشود.
- اگر برنامه شما در پیشزمینه اجرا میشود، در مقایسه با Android 7.1.1 (سطح API 25) تغییری در نرخهای نمونهگیری مکان وجود ندارد.
- ژئوفنسینگ
- برنامههای پسزمینه میتوانند رویدادهای انتقال جغرافیایی را بیشتر از بهروزرسانیهای Fused Location Provider دریافت کنند.
- میانگین پاسخگویی برای یک رویداد geofencing هر چند دقیقه یا بیشتر است.
- اندازهگیریهای GNSS و پیامهای ناوبری GNSS
- وقتی برنامه شما در پسزمینه است، فراخوانهایی که برای دریافت خروجیهای
GnssMeasurement
وGnssNavigationMessage
ثبت شدهاند، اجرا نمیشوند.
- وقتی برنامه شما در پسزمینه است، فراخوانهایی که برای دریافت خروجیهای
- مدیر موقعیت مکانی
به روز رسانی مکان برای برنامه های پس زمینه فقط چند بار در هر ساعت ارائه می شود.
توجه: اگر برنامه شما روی دستگاهی با سرویسهای Google Play نصب شده اجرا میشود، توصیه میشود به جای آن از Fused Location Provider (FLP) استفاده کنید.
- مدیر وای فای
- متد
startScan()
یک اسکن کامل برای برنامه های پس زمینه فقط چند بار در هر ساعت انجام می دهد. اگر یک برنامه پسزمینه دوباره این روش را بلافاصله بعد از آن فراخوانی کند، کلاسWifiManager
نتایج ذخیرهشده را از اسکن قبلی ارائه میکند.