با استفاده از API های مکان سرویس های گوگل پلی، برنامه شما می تواند آخرین مکان شناخته شده دستگاه کاربر را درخواست کند. در بیشتر موارد، شما به مکان فعلی کاربر علاقه مند هستید که معمولاً معادل آخرین مکان شناخته شده دستگاه است.
به طور خاص، از ارائه دهنده مکان fused برای بازیابی آخرین مکان شناخته شده دستگاه استفاده کنید. ارائه دهنده مکان fused یکی از APIهای مکان در سرویسهای Google Play است. این سرویس، فناوری مکانیابی زیربنایی را مدیریت میکند و یک API ساده ارائه میدهد تا بتوانید الزامات را در سطح بالا، مانند دقت بالا یا مصرف کم انرژی، مشخص کنید. همچنین استفاده دستگاه از باتری را بهینه میکند.
توجه: وقتی برنامه شما در پسزمینه اجرا میشود، دسترسی به موقعیت مکانی باید برای عملکرد اصلی برنامه حیاتی باشد و با افشای مناسب به کاربران همراه باشد.
این درس به شما نشان میدهد که چگونه با استفاده از متد getLastLocation() در ارائهدهنده مکان fused، یک درخواست واحد برای مکان یک دستگاه ارسال کنید.
سرویسهای گوگل پلی را راهاندازی کنید
برای دسترسی به ارائهدهنده موقعیت مکانی ادغامشده، پروژه توسعه برنامه شما باید شامل سرویسهای Google Play باشد. کامپوننت سرویسهای Google Play را از طریق SDK Manager دانلود و نصب کنید و کتابخانه را به پروژه خود اضافه کنید. برای جزئیات بیشتر، به راهنمای راهاندازی سرویسهای Google Play مراجعه کنید.
مجوزهای برنامه را مشخص کنید
برنامههایی که ویژگیهای آنها از سرویسهای موقعیت مکانی استفاده میکند، بسته به موارد استفاده از آن ویژگیها، باید مجوزهای موقعیت مکانی را درخواست کنند .
ایجاد کلاینت سرویسهای مکان
در متد onCreate() مربوط به activity خود، یک نمونه از Fused Location Provider Client مطابق قطعه کد زیر ایجاد کنید.
کاتلین
private lateinit var fusedLocationClient: FusedLocationProviderClient override fun onCreate(savedInstanceState: Bundle?) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) }
جاوا
private FusedLocationProviderClient fusedLocationClient; // .. @Override protected void onCreate(Bundle savedInstanceState) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this); }
آخرین مکان شناخته شده را دریافت کنید
پس از ایجاد کلاینت سرویسهای موقعیت مکانی، میتوانید آخرین موقعیت مکانی شناخته شده دستگاه کاربر را دریافت کنید. هنگامی که برنامه شما به این سرویسها متصل شد، میتوانید از متد getLastLocation() ارائه دهنده موقعیت مکانی fused برای بازیابی موقعیت مکانی دستگاه استفاده کنید. دقت موقعیت مکانی برگردانده شده توسط این فراخوانی توسط تنظیمات مجوزی که در مانیفست برنامه خود قرار دادهاید، تعیین میشود، همانطور که در راهنمای نحوه درخواست مجوزهای موقعیت مکانی توضیح داده شده است.
برای درخواست آخرین مکان شناخته شده، متد getLastLocation() را فراخوانی کنید. قطعه کد زیر درخواست و نحوهی سادهی مدیریت پاسخ را نشان میدهد:
کاتلین
fusedLocationClient.lastLocation .addOnSuccessListener { location : Location? -> // Got last known location. In some rare situations this can be null. }
جاوا
fusedLocationClient.getLastLocation() .addOnSuccessListener(this, new OnSuccessListener<Location>() { @Override public void onSuccess(Location location) { // Got last known location. In some rare situations this can be null. if (location != null) { // Logic to handle location object } } });
متد getLastLocation() یک Task برمیگرداند که میتوانید از آن برای دریافت یک شیء Location به همراه مختصات طول و عرض جغرافیایی یک مکان جغرافیایی استفاده کنید. شیء location ممکن است در شرایط زیر null باشد:
- موقعیت مکانی در تنظیمات دستگاه غیرفعال است. حتی اگر آخرین موقعیت مکانی قبلاً بازیابی شده باشد، نتیجه میتواند
nullباشد زیرا غیرفعال کردن موقعیت مکانی، حافظه پنهان را نیز پاک میکند. - دستگاه هرگز موقعیت مکانی خود را ثبت نکرده است، که میتواند مربوط به یک دستگاه جدید یا دستگاهی باشد که به تنظیمات کارخانه بازگردانده شده است.
- سرویسهای گوگل پلی روی دستگاه مجدداً راهاندازی شدهاند و هیچ کلاینت فعالی از Fused Location Provider وجود ندارد که پس از راهاندازی مجدد سرویسها، درخواست موقعیت مکانی داده باشد. برای جلوگیری از این وضعیت، میتوانید یک کلاینت جدید ایجاد کنید و خودتان درخواست بهروزرسانی موقعیت مکانی دهید. برای اطلاعات بیشتر، به «درخواست بهروزرسانی موقعیت مکانی» مراجعه کنید.
بهترین تخمین مکان را انتخاب کنید
FusedLocationProviderClient چندین روش برای بازیابی اطلاعات موقعیت مکانی دستگاه ارائه میدهد. بسته به مورد استفاده برنامه خود، یکی از موارد زیر را انتخاب کنید:
-
getLastLocation()تخمین موقعیت مکانی را سریعتر دریافت میکند و مصرف باتری را که میتوان به برنامه شما نسبت داد، به حداقل میرساند. با این حال، اگر اخیراً هیچ کلاینت دیگری به طور فعال از موقعیت مکانی استفاده نکرده باشد، ممکن است اطلاعات موقعیت مکانی قدیمی باشد. getCurrentLocation()موقعیت مکانی جدیدتر و دقیقتری را به طور مداوم دریافت میکند. با این حال، این متد میتواند باعث شود محاسبه موقعیت مکانی فعال روی دستگاه انجام شود.این روش، در صورت امکان، برای دریافت یک مکان جدید توصیه میشود و نسبت به گزینههای دیگری مانند شروع و مدیریت بهروزرسانیهای مکان توسط خودتان با استفاده از
requestLocationUpdates()امنتر است. اگر برنامه شماrequestLocationUpdates()را فراخوانی کند، اگر مکان در دسترس نباشد، یا اگر درخواست پس از دریافت یک مکان جدید به درستی متوقف نشود، برنامه شما گاهی اوقات میتواند مقدار زیادی برق مصرف کند.
منابع اضافی
برای اطلاعات بیشتر در مورد دریافت موقعیت مکانی فعلی در اندروید، مطالب زیر را مشاهده کنید:
نمونهها
- برنامه نمونه برای نشان دادن بهترین شیوهها هنگام دریافت مکان فعلی.