بااستفاده از میاناهای برنامهسازی کاربردی مکان خدمات Google Play، برنامهتان میتواند آخرین مکان شناختهشده دستگاه کاربر را درخواست کند. در بیشتر موارد، شما به مکان فعلی کاربر علاقه دارید که معمولاً معادل آخرین مکان شناختهشده دستگاه است.
بهطور خاص، از ارائهدهنده مکان تلفیقی برای بازیابی آخرین مکان شناختهشده دستگاه استفاده کنید. ارائهدهنده مکان تلفیقی یکی از میاناهای برنامهسازی کاربردی مکان در «خدمات Google Play» است. این میانای برنامهسازی کاربردی فناوری مکانیابی زیربنایی را مدیریت میکند و میانای برنامهسازی کاربردی سادهای ارائه میدهد تا بتوانید الزامات را در سطح بالا، مثل دقت بالا یا مصرف کم باتری، مشخص کنید. همچنین مصرف باتری دستگاه را بهینه میکند.
توجه: وقتی برنامهتان در پسزمینه اجرا میشود، دسترسی به مکان باید برای عملکرد اصلی برنامه حیاتی باشد و با شفافسازی مناسب برای کاربران همراه باشد.
این درس به شما نشان میدهد که چگونه بااستفاده از روش
getLastLocation()
در ارائهدهنده مکان تلفیقی، یک درخواست تکی برای مکان دستگاه
ارسال کنید.
راهاندازی خدمات Google Play
برای دسترسی به ارائهکننده مکان تلفیقی، پروژه توسعه برنامهتان باید شامل خدمات Google Play باشد. جزء خدمات Google Play را ازطریق مدیر SDK بارگیری و نصب کنید و کتابخانه را به پروژهتان اضافه کنید. برای جزئیات، راهنمای راهاندازی خدمات Google Play را ببینید.
مشخص کردن اجازههای برنامه
برنامههایی که ویژگیهایشان از خدمات مکان استفاده میکند باید اجازههای مکان را درخواست کنند، که این امر به موارد استفاده آن ویژگیها بستگی دارد.
ایجاد کارخواه خدمات مکان
در روش onCreate() فعالیتتان،
نمونهای از «کارخواه ارائهکننده مکان تلفیقی» ایجاد کنید، همانطور که در تکهکد زیر نشان داده شده است.
کاتلین
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() ارائهدهنده مکان تلفیقی برای بازیابی مکان دستگاه استفاده کنید. دقت مکانی که این فراخوانی برمیگرداند براساس تنظیمات اجازهای که در مانیفست برنامهتان قرار دادهاید تعیین میشود، همانطور که در راهنمای نحوه درخواست اجازههای مکان شرح داده شده است.
برای درخواست آخرین مکان مشخص، روش
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
با مختصات طول و عرض جغرافیایی
مکان جغرافیایی استفاده کنید. در شرایط زیر، شیء مکان ممکن است null باشد:
- مکان در تنظیمات دستگاه خاموش است. حتی اگر آخرین مکان قبلاً بازیابی شده باشد، نتیجه میتواند
nullباشد زیرا غیرفعال کردن مکان، حافظه پنهان را نیز پاک میکند. - دستگاه هرگز مکانش را ضبط نکرده است، که میتواند درمورد دستگاه جدید یا دستگاهی که به تنظیمات کارخانه بازگردانده شده است صدق کند.
- «خدمات Google Play» در دستگاه بازراهاندازی شده است و هیچ کارخواه «ارائهدهنده مکان تلفیقی» فعالی وجود ندارد که پساز بازراهاندازی خدمات، مکان را درخواست کرده باشد. برای جلوگیری از این وضعیت، میتوانید مشتری جدیدی ایجاد کنید و خودتان بهروزرسانیهای مکان را درخواست کنید. برای اطلاعات بیشتر، درخواست بهروزرسانیهای مکان را ببینید.
انتخاب بهترین تخمین مکان
FusedLocationProviderClient چند روش برای بازیابی اطلاعات مکان دستگاه ارائه میدهد. بسته به مورد استفاده برنامهتان، یکی از گزینههای زیر را انتخاب کنید:
getLastLocation()مکان تخمینی را سریعتر دریافت میکند و مصرف باتری را که میتواند به برنامه شما نسبت داده شود بهحداقل میرساند. بااینحال، اگر هیچ مشتری دیگری اخیراً بهطور فعال از مکان استفاده نکرده باشد، ممکن است اطلاعات مکان قدیمی باشد.getCurrentLocation()مکان جدیدتر و دقیقتری را بهطور مداومتر دریافت میکند. اما این روش میتواند باعث شود محاسبه مکان فعال در دستگاه انجام شوداین روش توصیهشده برای دریافت مکان جدید است، هر زمان که ممکن باشد، و ایمنتر از جایگزینهایی مانند شروع و مدیریت بهروزرسانیهای مکان توسط خودتان بااستفاده از
requestLocationUpdates()است. اگر برنامهتانrequestLocationUpdates()را فراخوانی کند، گاهیاوقات اگر مکان دردسترس نباشد یا اگر درخواست پساز دریافت مکان جدید بهدرستی متوقف نشود، برنامهتان میتواند مقدار زیادی انرژی مصرف کند.
منابع بیشتر
برای کسب اطلاعات بیشتر درباره واکشی مکان فعلی در Android، مطالب زیر را مشاهده کنید:
نمونهها
- برنامه نمونه برای نشان دادن روالهای مطلوب هنگام واکشی مکان فعلی.