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